如何在 Linux 中删除文本文件中字符串末尾的所有空格

如何在 Linux 中删除文本文件中字符串末尾的所有空格

我有一个文件 a.txt,它包含字符串,但在末尾 cat -vet a.txt显示了一些额外的空格

ab cd^M$
abcdefg ^M$ //there is a space at the end
aaaaaaa^M$
bbbbbbb^I^M$ //there is a tab at the end
xyz^M$
ab cc ^M$ //there is a space at the end
hello^M$
help me^M$ 
to solve ^M$ //there is a space at the end
this problem^M$
^M$
^M$

那么如何删除字符串末尾的空格

尝试使用此 sed 命令但失败了

sed -i -E 's/ *$//' a.txt

答案1

^M是 MSWin 行尾,因此$不匹配。如果您不想删除回车符,您还需要在规则中匹配它们。使用\r^M 和\t制表符 ( ^I):

sed -e 's/[\t ]*\r$//'

如果某些行不是以回车符结尾,则将其设为可选。然后您需要将空格设为非可选,否则 sed 将匹配空字符串:

sed -e 's/[\t ]\+\r\?$//'
# or
sed -E 's/[\t ]+\r?$//' 

答案2

用途:
sed -e '/[[:space:]]\+$/s///'

sed -Ee '/[[:space:]]+$/s///'
含义:

“如果行尾有空格字符,则将其删除。”

ASCII CR(^M)是空格字符(LF、FF、空格、TAB 也是如此)。

相关内容