2009-10-20 61 views
8

文件1:用sed刪除所有領先/下列空格在文本文件中

hello 
    world 

會如何使用SED一個刪除此文件中的前/後空格 - 使用一個命令(無中間文件)

我目前有:

sed -e 's/^[ \t]*//' a > b 

對於前導空格。

sed 's/ *$//' b > c 

而這對於尾隨空格。

+0

雖然@ ghostdog74的回答是一個很好的答案,根據你的問題,@ mouviciel的答案是*正確的*答案。我贊成這兩項,但我相信@moviciel應該被接受爲正確的答案。 – 2009-10-20 08:21:40

+0

你是對的 - mouviciel現在被接受。感謝mouviciel(正確答案)和ghostdog74(指示awk)的時間! – user191960 2009-10-20 08:45:00

回答

10

你幾乎得到它:

sed -e 's/^[ \t]*//;s/[ \t]*$//' a > c 

而且對sed一些味道,也有編輯內嵌一個選項:

sed -i -e 's/^[ \t]*//;s/[ \t]*$//' a 
+3

我也會考慮匹配'\ s'這是通用的'所有空白字符'。 – 2009-10-20 08:11:33

+0

不應該是'sed -e's/^ [\ t] * //; s/[\ t] * $ //'a> c'? – 2015-03-27 12:56:33

+0

我仍然看到'sed -e's/^ [\ t] * //; s/[\ t] * $ /'a> c'這對我不起作用(bash版本4.3.30,Funtoo-Linux )。 – 2015-03-27 22:37:00

7

更簡單的方法,用awk

awk '{$1=$1}1' file 

awk '{gsub(/^ +| +$/,"")}1' file 
+0

第一個工作完美,是最簡單的 - 我知道它不是我問(即sed) - 但它很優雅:)。我現在將研究awk。 – user191960 2009-10-20 08:15:24

+0

第一個刪除所有僞造的空白,不僅是前導和尾隨。第二個效果最好。 'awk'是一個很棒的工具。 – mouviciel 2009-10-20 08:24:07

+0

啊,我看到現在第一個空間被刪除 - 第二個沒有額外的刪除工作。 – user191960 2009-10-20 08:42:40

3
perl -lape 's/^\s+|\s+$//g' 

老實說,我知道Perl的正則表達式是最好的,所以我覺得perl -lape更容易比sed -e使用。

此外,要回答原來的問題,你可以用sed執行這樣的多個操作:

sed -e 's/something/something else/' -e 's/another substitution/another replacement/' 

顯然,你也可以把兩個換人的一個字符串,並用分號,單獨作爲中指出另一個答案。

0

注意的是,在一排的輸入文件將幾個過濾器,而無需使用中間文件的更一般的情況下,解決方案是使用管道:

sed -e 's/^[ \t]*//' a | sed -e 's/ *$//' > c 

顯然,他們在這裏沒有必要的,因爲一個調用的sed是足夠的,但如果第二個sed命令是不同的,比如uniq或sort,那麼這個模式是正確的。

相關問題