sed 感叹号

Vla*_* M. 4 shell sed regular-expression

今天我遇到了这个从域控制器的 FQDN 中提取域名的命令:

DOMAIN_NAME=$(echo $DC_PC | sed -r 's!^[^.]+\.!!')
Run Code Online (Sandbox Code Playgroud)

sed中这些感叹号是什么意思?它是如何工作的?

Ste*_*itt 6

之后的第一个字符s用作参数 to 的分隔符s,因此这会替换^[^.]+\.与空字符串匹配的任何内容。传统上这会写成

sed -r 's/^[^.]+\.//'
Run Code Online (Sandbox Code Playgroud)

  • 更改分隔符的原因是为了防止牙签倾斜问题:https://en.wikipedia.org/wiki/Leaning_toothpick_syndrome#Sed (4认同)