我使用下面的代码从文件A.txt的所有行中删除前导和尾部空格
sed 's/^[ \t]*//;s/[ \t]*$//' ./A.txt > ./B.txt
问题发生在开头或结尾有t的行上。例如,以字符串“timezone”开头的原始行变为“imezone”你能告诉我这是怎么回事吗?以及是否存在已知的问题解决方案。先谢了。
bwleehnv1#
一些旧版本的sed不理解C风格的转义字符,如\t,并将其视为两个字符,''和't '。您可以通过使用文本制表符来避免这个问题--如果您直接在shell中键入这个字符,请键入Ctrl+V Tab。
Ctrl+V Tab
q8l4jmvw2#
另一种替代方法是使用空白字符类,如果您的sed不支持\s:
\s
sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
im9ewurl3#
如果你只使用空白字符类,你可能会有更好的运气:
sed -e 's/^\s*//' -e 's/\s*$//' A.txt > B.txt
atmip9wb4#
较新版本的sed理解\t,但较旧版本可能不理解。您最好用文字制表符替换\t(CTRL-V将为您提供给予)你在什么系统上使用什么版本的sed?(sed --GNU sed版本)
xiozqbni5#
gawk
awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,"")}1' file
5条答案
按热度按时间bwleehnv1#
一些旧版本的sed不理解C风格的转义字符,如\t,并将其视为两个字符,''和't '。您可以通过使用文本制表符来避免这个问题--如果您直接在shell中键入这个字符,请键入
Ctrl+V Tab
。q8l4jmvw2#
另一种替代方法是使用空白字符类,如果您的sed不支持
\s
:im9ewurl3#
如果你只使用空白字符类,你可能会有更好的运气:
atmip9wb4#
较新版本的sed理解\t,但较旧版本可能不理解。您最好用文字制表符替换\t(CTRL-V将为您提供给予)
你在什么系统上使用什么版本的sed?(sed --GNU sed版本)
xiozqbni5#
gawk