我正在使用以下代码从文件 A.txt 的所有行中删除前导和尾随空格
sed 's/^[ \t]*//;s/[ \t]*$//' ./A.txt > ./B.txt
问题出现在开头或结尾有 at 的行上。例如,以字符串“timezone”开头的原始行变为“imezone”
你能告诉我这里发生了什么吗?以及是否有已知的问题解决方案。
提前致谢。
我正在使用以下代码从文件 A.txt 的所有行中删除前导和尾随空格
sed 's/^[ \t]*//;s/[ \t]*$//' ./A.txt > ./B.txt
问题出现在开头或结尾有 at 的行上。例如,以字符串“timezone”开头的原始行变为“imezone”
你能告诉我这里发生了什么吗?以及是否有已知的问题解决方案。
提前致谢。
一些旧版本的 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