2014-09-25 69 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就足够了

相关问题