什么是'/[AZ]/s| |/|gp' 是什么意思?

use*_*625 2 regex sed

我正在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模式的语法检查不严格,容易混淆

Sun*_*eep 6

  • -n 选项关闭自动打印
  • sed 允许使用地址过滤来限定命令,可以是正则表达式或行地址
    • 例如,/foo/ d将删除包含的行foo
    • 并且/foo/ s/baz/123/将改变baz123只有在订单中还含有foo
  • /[A-Z]/ 只匹配包含至少一个大写字母的行