从文件中的每一行删除最后一个字符串

时间:2014-09-25 03:50:02

标签: bash awk sed grep

我有一个txt文件,我想使用sed,awk,grep或任何组合来删除文件中每行的最后一个字符串。

我想我需要像sed' $ s /'这样的东西。但是无法弄明白。感谢。

示例:

fab foo bar

fab foo fab

fab foo foo

期望的输出。

fab foo

fab foo

fab foo

请注意,最后一个字符串在每一行都不同。

5 个答案:

答案 0 :(得分:5)

怎么样

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

答案 1 :(得分:4)

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

上面删除了每一行的最后一串非空格以及该字符串之前或之后的任何空格。

答案 2 :(得分:4)

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

需要这样的条件,因为NF不能被指定负值而空行已经有NF == 0。如果输入中没有空行,那么awk 'NF--' file就足够了

答案 3 :(得分:2)

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

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

通过perl,

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

要删除最后一个单词前的前导空格。

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

答案 4 :(得分:2)

另一种方法是打印除最后一个字段之外的每个字段:

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