Chr*_*ieb 10 bash escaping sed
我有一个正则表达式和替换模式,已经在我的输入数据上使用Notepad ++进行了测试并正常工作.然而,当我将它们放入sed表达式时,没有任何东西可以匹配.
这是sed命令:
# SEARCH = ([a-zA-Z0-9.]+) [0-9] (.*)
# REPLACE = \2 (\1)
sed -e 's/\([a-zA-Z0-9.]+\) [0-9] \(.*\)/\2 \(\1\)/g'
Run Code Online (Sandbox Code Playgroud)
以下是数据的抽样:
jdoe 1 Doe, John
jad 1 Doe, Jane
smith 2 Smith, Jon
Run Code Online (Sandbox Code Playgroud)
和期望的输出:
Doe, John (jdoe)
Doe, Jane (jad)
Smith, Jon (smith)
Run Code Online (Sandbox Code Playgroud)
我已经尝试删除并添加转义到sed表达式中的不同字符,但要么没有得到任何匹配或类似的东西:
sed: -e expression #1, char 42: invalid reference \2 on `s' command's RHS
Run Code Online (Sandbox Code Playgroud)
如何才能正确转义?
Mar*_*ers 17
我通常发现使用-r开关更容易,因为这意味着转义类似于大多数其他语言的转义:
sed -r 's/([a-zA-Z0-9.]+) [0-9] (.*)/\2 (\1)/g' file1.txt
Run Code Online (Sandbox Code Playgroud)
对其他人已经说过的一些警告和补充:
-r
选项是GNU扩展,用于启用扩展正则表达式.-E
相反,BSD导出了sed的使用.我建议将表达式重写为
's/\([a-zA-Z0-9.]\{1,\}\) [0-9] \(.*\)/\2 (\1)/g'
Run Code Online (Sandbox Code Playgroud)
哪个应该在任何符合POSIX标准的情况下完全符合您的要求sed
.如果您确实关心这些事情,请考虑定义POSIXLY_CORRECT
环境变量.
归档时间: |
|
查看次数: |
6346 次 |
最近记录: |