2014-09-25 65 views
1

我有一個txt文件,我想要使用sed,awk,grep或任何組合刪除文件中每行的最後一個字符串。從文件中的每一行中刪除最後一個字符串

我想我需要類似sed'$ s /'的東西。但不能完全弄清楚。謝謝。

實施例:

fab foo bar 

fab foo fab 

fab foo foo 

希望的輸出。

fab foo 

fab foo 

fab foo 

請注意,最後一個字符串將在每一行中不同。

回答

5

如何

awk '{$NF=""}1' file 
+1

+1,但請注意,這也會修改空格 – 2014-09-25 04:06:41

+1

我喜歡這個答案,因爲它的簡單性,因爲大多數答案的工作。不幸的是,我沒有意識到一些行實際上有多個我想要刪除的字符串。但是在時間到了的時候會參考這篇文章。謝謝。 – user2631279 2014-09-25 04:13:02

+1

這不僅僅是刪除行上的最後一個字符串,它會重新編譯整個記錄並添加尾隨空格。 – 2014-09-25 04:27:18

4
sed -r 's/[[:space:]]*[^[:space:]]+[[:space:]]*$//' file 

上面的內容會刪除每行上的最後一個非空格字符串以及該字符串之前或之後的任何空格。

+1

+1:Aah好的想法去除最後一個字段之前的剩餘空間。 – 2014-09-25 04:04:51

2

你可以試試下面的sed命令,

sed 's/ \+[^ ]\+$//' file 

通過perl的,

perl -pe 's/\S+\s*$//' file 

還去除最後一個字前面有一個空格。

perl -pe 's/\s+\S+\s*$//' file 
2

另一種方法是打印各個領域,除了最後:

awk ' 
{ 
    for(i=1; i<NF; i++) 
    { 
     printf "%s ", $i; 
    } 
    printf "\n"; 
}' file 
4

awk '{if(NF)NF--}1' file

爲NF不能是需要的條件分配一個負值,空行已經有NF == 0。如果在輸入中沒有空行,那麼awk 'NF--' file就足夠了

相關問題