在shell中删除一行的最后一个单词

6
我正在寻找如何在shell中删除一行的最后一个单词!我使用了sed命令,但是我只发现了删除每行最后一个单词的方法,而不是指定某一行。 例如:我有一个名为test.db的文件。
key1 value1
key2 value2
key3 value3

我只想删除value3

sed -i s/'\w*$'// test.db

这行代码可以删除每行末尾的最后一个单词!


你想要指定从哪一行删除最后一个单词? - lurker
只需为您的s提供行号,例如对于第一行,它将是:sed -i 1s/'\w*$'// test.db。 - midori
5个回答

3
尝试这个:

试一下:

sed -i '1{s/[^ ]\+\s*$//}' file test.db

3
如果您只想从最后一行删除最后一个单词,则可以使用以下方法:
sed -i '$s/\w*$//' test.db

如果你想从 key3 的这一行删除最后一个单词:

sed -i '/key3/s/\w*$//' test.db

为什么在使用sed命令时要使用双引号来包围具有副作用的命令,例如\$。单引号会使命令更清晰明了。 - potong

2

这里有一个用于删除最后一个字段的 awk 命令:

echo "one two three" | awk '{$NF="";sub(/[ \t]+$/,"")}1'
one two

1

删除您行中的最后一个单词

由于您的目标是行 key3 value3

  sed -i '/key3 value3/s/\S*$//' test.db

\S代表一个不是空格或空白字符的数字。

删除特定行的最后一个单词(通用规则)

   sed -i '/line pattern/s/\S*$//' test.db

线条图案代表着在您想要的行上找到的图案。

0
这个可能对你有用(GNU sed):
sed -r '$s/(\s*)\S+(\s*)$/\1\2/' file

这会从最后一行中移除最后一个非空格标记(保留任何周围的空白)。

如果要同时去除周围的空白,请使用以下方法:

sed -r '$s/\s*\S+\s*$//' file

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接