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
精彩评论