我有一个文件 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 也是如此)。