\s
似乎无法与
sed 's/[\s]\+//' tempfile
正在为
工作sed 's/[ ]\+//' tempfile
我正在尝试删除由于命令而出现在每行开头的空格:
nl -s ') ' file > tempfile
e.g。文件:
A Storm of Swords, George R. R. Martin, 1216
The Two Towers, J. R. R. Tolkien, 352
The Alchemist, Paulo Coelho, 197
The Fellowship of the Ring, J. R. R. Tolkien, 432
The Pilgrimage, Paulo Coelho, 288
A Game of Thrones, George R. R. Martin, 864
临时文件:
1) Storm of Sword, George R. R. Martin, 1216
2) The Two Tower, J. R. R. Tolkien, 352
3) The Alchemit, Paulo Coelho, 197
4) The Fellowhip of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Throne, George R. R. Martin, 864
即。数字之前有空格
请解释为什么会出现空格以及\s
无效的原因。
答案 0 :(得分:2)
原因很简单:POSIX正则表达式引擎不会像括号表达式那样解析类似Perl的字符类。
请参阅this reference:
一个关键的语法区别是反斜杠不是POSIX括号表达式中的元字符。所以在POSIX中,正则表达式
[\d]
匹配\
或d
。
因此,POSIX正则表达式中的[\s]
匹配两个符号之一:\
或s
。
echo 'ab\sc' | sed 's/[\s]\+//'
输出为abc
。 <{1}}子字符串已删除。
考虑使用POSIX字符类而不是类似Perl的短字:
\s
请参阅this online demo(输出为echo 'ab\s c' | sed 's/[[:space:]]\+//'
)。 POSIX字符类由ab\sc
组成,它们只能在括号表达式中使用。请参阅more examples of POSIX character classes here。
注意:如果您想确保删除该行开头的空格,请在模式开头添加[:<NAME_OF_CLASS>:]
:
^
更多图案:
sed 's/^[[:space:]]\+//'
^
= \w
[[:alnum:]_]
= \W
[^[:alnum:]_]
= \d
(或[[:digit:]]
)[0-9]
= \D
(或[^[:digit:]]
)[^0-9]
= \h
[[:blank:]]
= \S
答案 1 :(得分:1)
您也可以格式化没有固定宽度的数字。来自coreutils.info
:
‘-w NUMBER’
‘--number-width=NUMBER’
Use NUMBER characters for line numbers (default 6).
E.g:
nl -w 1 -s ') ' infile
输出:
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864