regex 使用Sed删除前导和尾随空格时出现问题

z5btuh9x  于 2023-10-22  发布在  其他
关注(0)|答案(5)|浏览(133)

我使用下面的代码从文件A.txt的所有行中删除前导和尾部空格

sed 's/^[ \t]*//;s/[ \t]*$//' ./A.txt > ./B.txt

问题发生在开头或结尾有t的行上。例如,以字符串“timezone”开头的原始行变为“imezone”
你能告诉我这是怎么回事吗?以及是否存在已知的问题解决方案。
先谢了。

bwleehnv

bwleehnv1#

一些旧版本的sed不理解C风格的转义字符,如\t,并将其视为两个字符,''和't '。您可以通过使用文本制表符来避免这个问题--如果您直接在shell中键入这个字符,请键入Ctrl+V Tab

q8l4jmvw

q8l4jmvw2#

另一种替代方法是使用空白字符类,如果您的sed不支持\s

sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
im9ewurl

im9ewurl3#

如果你只使用空白字符类,你可能会有更好的运气:

sed -e 's/^\s*//' -e 's/\s*$//' A.txt > B.txt
atmip9wb

atmip9wb4#

较新版本的sed理解\t,但较旧版本可能不理解。您最好用文字制表符替换\t(CTRL-V将为您提供给予)
你在什么系统上使用什么版本的sed?(sed --GNU sed版本)

xiozqbni

xiozqbni5#

gawk

awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,"")}1' file

相关问题