我有一个txt文件,我想使用sed,awk,grep或任何组合来删除文件中每行的最后一个字符串。
我想我需要像sed' $ s /'这样的东西。但是无法弄明白。感谢。
示例:
fab foo bar
fab foo fab
fab foo foo
期望的输出。
fab foo
fab foo
fab foo
请注意,最后一个字符串在每一行都不同。
答案 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