我使用以下代码从文件的所有行中删除前导和尾随空格A.txt
sed 's/^[ \t]*//;s/[ \t]*$//' ./A.txt > ./B.txt
问题出现在开头或结尾有t的行上。例如,例如,以字符串“timezone”开头的原始行变为“imezone”
你能告诉我这里发生了什么吗?如果有一个已知的问题解决方案。
提前致谢。
答案 0 :(得分:6)
某些旧版本的sed不理解C风格的转义字符,例如\ t,并将其视为两个字符,'\'和't'。您可以使用文字制表符来避免此问题 - 如果您直接在shell中键入此字符,请键入Ctrl+V Tab
。
答案 1 :(得分:3)
使用空白字符类的另一种选择,如果你的各种sed不支持\s
:
sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
答案 2 :(得分:2)
如果您只使用空白字符类,那么您可能会有更好的运气:
sed -e 's/^\s*//' -e 's/\s*$//' A.txt > B.txt
答案 3 :(得分:2)
较新版本的sed了解\ t但旧版本可能没有。你可能最好用文字标签取代\ t(CTRL-V会给你那个)
你在什么系统上使用什么版本的sed? (sed - GNU sed的版本)
答案 4 :(得分:1)
gawk的
awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,"")}1' file