2

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

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

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

你能告诉我这里发生了什么吗?以及是否有已知的问题解决方案。

提前致谢。

4

5 回答 5

6

一些旧版本的 sed 不理解 C 样式的转义字符,例如 \t,并将其视为两个字符,'\' 和 't'。您可以通过使用文字制表符来避免该问题——如果您直接在 shell 中键入它,请键入Ctrl+V Tab.

于 2009-11-20T00:34:16.363 回答
3

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

sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
于 2009-11-20T00:35:44.750 回答
2

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

sed -e 's/^\s*//' -e 's/\s*$//' A.txt > B.txt
于 2009-11-20T00:32:13.370 回答
2

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

您在什么系统上使用什么版本的 sed?(sed -- GNU sed 的版本)

于 2009-11-20T00:32:55.223 回答
1

呆呆

awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,"")}1' file
于 2009-11-20T01:01:33.580 回答