\s似乎不适合
sed 's/[\s]\+//' tempfile
Run Code Online (Sandbox Code Playgroud)
当它正在为
sed 's/[ ]\+//' tempfile
Run Code Online (Sandbox Code Playgroud)
我正在尝试删除由于以下命令而出现在每行开头的空格:
nl -s ') ' file > tempfile
Run Code Online (Sandbox Code Playgroud)
例如文件:
sed 's/[\s]\+//' tempfile
Run Code Online (Sandbox Code Playgroud)
临时文件:
sed 's/[ ]\+//' tempfile
Run Code Online (Sandbox Code Playgroud)
即数字前面有空格
请解释为什么会出现空白以及\s不起作用的原因。
原因很简单:POSIX 正则表达式引擎不会解析括号表达式内的类似 Perl 的简写字符类。
请参阅此参考:
一个关键的语法差异是反斜杠不是 POSIX 括号表达式中的元字符。所以在 POSIX 中,正则表达式
[\d]匹配 a\或 ad。
因此, [\s]在 POSIX 正则表达式中,匹配两个符号之一:\或s。
考虑以下演示:
echo 'ab\sc' | sed 's/[\s]\+//'
Run Code Online (Sandbox Code Playgroud)
输出是abc. \s子字符串被删除。
考虑使用 POSIX 字符类而不是类似 Perl 的简写:
echo 'ab\s c' | sed 's/[[:space:]]\+//'
Run Code Online (Sandbox Code Playgroud)
请参阅此在线演示(输出为ab\sc)。POSIX 字符类由 组成[:<NAME_OF_CLASS>:],并且它们只能在括号表达式内使用。请在此处查看POSIX 字符类的更多示例。
注意:如果您想确保删除行开头的空格,请^在模式开头添加:
sed 's/^[[:space:]]\+//'
^
Run Code Online (Sandbox Code Playgroud)
更多图案:
\w=[[:alnum:]_]\W=[^[:alnum:]_]\d= [[:digit:]](或[0-9])\D= [^[:digit:]](或[^0-9])\h=[[:blank:]]\S=[^[:space:]]| 归档时间: |
|
| 查看次数: |
272 次 |
| 最近记录: |