我正在使用下面的代码从文件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