2014-02-14 16 views
0

我有這兩個正則表達式:在xargs的組合在一起的不同的正則表達式命令

find ... | xargs perl -pi -e 's/\t/ /g' 
find ... | xargs perl -pi -e 's/[^\S\n]+$//g' 

首先之一改變選項卡4米的空間,和第二在每一行的末尾去除任何尾部的空白。

我很想將兩者結合起來,但不想破壞某些東西。此外,他們正在做不同的事情 - 一個是增加空間,另一個是刪除空間。有沒有一種安全的方式將這兩者合併在一起,還是讓它們保持原樣?

+0

從技術上講,第二個替換刪除尾部空白*,除了換行*(換行符是一種空格)。 – ThisSuitIsBlackNot

回答

5

你可以這樣做:

find ... | xargs perl -l -pi -e 's/\t/ /g; s/\s+$//' 

由於第二find運行上第一個的結果是,在單個調用中連續執行每個命令是安全的。

+0

很酷謝謝我喜歡這個。不知道你能做到這一點。 – Dennis

+0

順便說一句,'/ \ s + $ // g'刪除所有行尾,並將我的文件合併爲一行。這就是我使用'[^ ​​\ S \ n]'的原因。我明白,在這裏,正則表達式在整個文件上運行,而不是按照每行的方式運行。 – Dennis

+1

你可以使用'... perl -pi -le ...'使其與'\ s'版本一起工作,但更容易沒有改變它從正確的'[^ \ S \ n]'。 (-l具有在文件末尾添加換行符的副作用)。 – ysth

4

我會離開的表達分開,但你可以通過一個調用執行他們兩個的Perl:

find ... | xargs perl -pi -e 's/\t/ /g;' -e 's/[^\S\n]+$//g;' 
+1

@mpapec你需要在每個表達式的結尾包含一個分號:'perl -pi -e's ///;' -e的///;'' –

+0

是的,確實.... –