sed 4.4 支持哪些分隔符

sed 4.4 支持哪些分隔符

我期望这两个 sed 命令是等效的,但mozilla/DST_Root_CA_X3.crt仅在第二种情况下被删除,为什么?

如果重要的话,我正在使用 sed 4.4 和 Debian Stretch

(stretch-arm64)ubuntu@ip-10-1-2-224:~$ sudo sed '#^mozilla/DST_Root_CA_X3.crt$#d' test-certificates.conf
mozilla/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.crt
mozilla/XRamp_Global_CA_Root.crt
mozilla/certSIGN_ROOT_CA.crt
mozilla/ePKI_Root_Certification_Authority.crt
mozilla/emSign_ECC_Root_CA_-_C3.crt
mozilla/emSign_ECC_Root_CA_-_G3.crt
mozilla/emSign_Root_CA_-_C1.crt
mozilla/emSign_Root_CA_-_G1.crt
mozilla/DST_Root_CA_X3.crt

(stretch-arm64)ubuntu@ip-10-1-2-224:~$ sudo sed '/^mozilla\/DST_Root_CA_X3.crt$/d' test-certificates.conf
mozilla/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.crt
mozilla/XRamp_Global_CA_Root.crt
mozilla/certSIGN_ROOT_CA.crt
mozilla/ePKI_Root_Certification_Authority.crt
mozilla/emSign_ECC_Root_CA_-_C3.crt
mozilla/emSign_ECC_Root_CA_-_G3.crt
mozilla/emSign_Root_CA_-_C1.crt
mozilla/emSign_Root_CA_-_G1.crt

答案1

以下所有内容在任何地方都有效sed,而不仅仅是 GNU sed

#角色发表评论。它可以被认为是一个“注释命令”,可以sed忽略该指令的其余部分。这就是为什么你的命令不任何事情,都不会产生错误。

要用#作用作地址的正则表达式的替代分隔符,请使用\#...#。这对于#您想要用作替代分隔符的任何字符来说并不特殊。

那些字符不能在这种情况下用作分隔符的是反斜杠和换行符。通常也不支持使用多字节字符。

无需进行特殊转义即可用作命令 ( )#中的分隔符。ss#...#...#


唯一#不仅仅充当注释字符的情况是sed编辑脚本中的前两个字符是#n。这相当于sed使用其-n选项运行(在每个周期结束时关闭编辑缓冲区的默认输出)。

$ echo hello | sed -e 'y/h/y/'
yello
$ echo hello | sed -e '#n' -e 'y/h/y/'
$ echo hello | sed -e '#n' -e 'y/h/y/' -e p
yello

相关内容