开发者

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.


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

sed 's/^[[:space:]]*//;s/[[:space:]]*$//'


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)


gawk

awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,"")}1' file
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜