使用Sed去除前导和尾随空格的问题

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

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

问题出现在开始或结束的行上。 所以说例如,以string“timezone”开头的原始行变成“imezone”

你能告诉我这里发生了什么吗? 并且如果存在已知的问题解决scheme。

提前致谢。

一些老版本的sed不理解C风格的转义字符,比如\ t,并把它当作两个字符'\'和't'。 您可以通过使用文本制表符来避免这个问题 – 如果您直接在shell中输入,请键入Ctrl+V Tab

另一种选择,使用空格字符类,如果您的各种sed不支持\s

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

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

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

新版本的sed理解\ t但旧版本可能没有。 用字面标签替换\ t可能会更好(CTRL-V会给你的)

你在什么系统上使用什么版本的sed? (sed – 版本为GNU sed)

呆子

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