当前位置: 动力学知识库 > 问答 > 编程问答 >

regex - Problem in using Sed to remove leading and trailing spaces

问题描述:

I am using the following code to remove both leading and tailing spaces from all lines of a file A.txt

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

The problem occurs on the lines where there is a t in the beginning or at the end. So say for example, the original line that starts with the string "timezone" becomes "imezone"

Can you please tell me what is happening here? and also if there is a known solution to the problem.

Thanks in advance.

网友答案:

Some older versions of sed don't understand C-style escape characters such as \t and treat that as two characters, '\' and 't'. You can avoid the problem by using a literal tab character -- if you're typing this directly into the shell, type Ctrl+V Tab.

网友答案:

You might have better luck if you just use the whitespace character class:

sed -e 's/^\s*//' -e 's/\s*$//' A.txt > B.txt
网友答案:

newer versions of sed understand \t but older versions may not have. You may be better off replacing \t with a literal tab (CTRL-V will give you that)

What version of sed are you using on what system? (sed --version for GNU sed)

网友答案:

Another alternative, using whitespace character classes, if your variety of sed doesn't support \s:

sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
网友答案:

gawk

awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,"")}1' file
分享给朋友:
您可能感兴趣的文章:
随机阅读: