我正在https://riptutorial.com/sed/example/13753/lines-matching-regular-expression-pattern阅读 sed 教程。
好像
$ sed -n '/[A-Z]/ s| |/|gp' ip.txt
Run Code Online (Sandbox Code Playgroud)
正在从文件中过滤“Add Sub Mul Div”,并将其转换为“Add/Sub/Mul/Div”
考虑到我刚刚阅读了https://www.tldp.org/LDP/abs/html/x23170.html ,我真的不理解正则表达式。
它甚至不匹配打印语法,即:
[address-range]/p
Run Code Online (Sandbox Code Playgroud)
是管道符号'|' 这里交替?
谁能解释一下:
'/[A-Z]/ s| |/|gp'
Run Code Online (Sandbox Code Playgroud)
用英语?
我还发现 's' 之前和 '/' 之后的额外空格是允许的,并且不会做任何事情。正确的语法应该是:
[address-range]/s/pattern1/pattern2/
Run Code Online (Sandbox Code Playgroud)
sed模式的语法检查不严格,容易混淆
-n 选项关闭自动打印sed 允许使用地址过滤来限定命令,可以是正则表达式或行地址
/foo/ d将删除包含的行foo/foo/ s/baz/123/将改变baz到123只有在订单中还含有foo/[A-Z]/ 只匹配包含至少一个大写字母的行
s| |/|gp 执行此替换并打印s命令允许使用其他分隔符/(请参阅在 sed 命令和范围地址中使用不同的分隔符)|允许您将其/用作普通字符,而不必对其进行转义