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

时间:2009-11-20 00:25:55

标签: regex linux unix pattern-matching matching

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

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

问题出现在开头或结尾有t的行上。例如,例如,以字符串“timezone”开头的原始行变为“imezone”

你能告诉我这里发生了什么吗?如果有一个已知的问题解决方案。

提前致谢。

5 个答案:

答案 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