Linux 删除shell中一行的最后一个字

Linux 删除shell中一行的最后一个字,linux,bash,shell,sed,sh,Linux,Bash,Shell,Sed,Sh,我正在寻找如何删除shell中一行的最后一个字! 我使用sed,但我只找到了如何删除每行的lase单词,而不是指定行。 例如:我有一个文件test.db key1 value1 key2 value2 key3 value3 我只想删除value3 sed -i s/'\w*$'// test.db 这行只需删除每行的最后一个字 试试这个: sed -i '1{s/[^ ]\+\s*$//}' file test.db 如果只想删除最后一行的最后一个单词,则可以使用: sed -i '$s

我正在寻找如何删除shell中一行的最后一个字! 我使用sed,但我只找到了如何删除每行的lase单词,而不是指定行。 例如:我有一个文件test.db

key1 value1
key2 value2
key3 value3
我只想删除value3

sed -i s/'\w*$'// test.db
这行只需删除每行的最后一个字

试试这个:

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

如果只想删除最后一行的最后一个单词,则可以使用:

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

如果要从
key3
的行中删除最后一个单词:

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

删除行的最后一个字

因为您的目标是行
key3 value3

  sed -i '/key3 value3/s/\S*$//' test.db
其中\S表示不是空格或空白的数字

删除特定行的最后一个字(一般规则)

line pattern表示在要瞄准的行上找到的模式这可能适合您(GNU-sed):

这将从最后一行中删除最后一个非空格标记(保留周围的空白)

要同时删除周围的空白,请使用:

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

下面是一个要删除最后一个字段的
awk

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

如何指定要从中删除最后一个单词的行?JU向s提供行数,例如,对于第一行,它将是:sed-i 1s/'\w*$'//test.db为什么要使用双引号括住sed命令,这在使用shell时会产生副作用,即
\$
。单引号将使命令更加清晰。
sed -r '$s/\s*\S+\s*$//' file
echo "one two three" | awk '{$NF="";sub(/[ \t]+$/,"")}1'
one two