SED - 查找和替换特殊字符 (#, , % )

hoi*_*isu 0 command-line grep sed awk files

我知道这是一个非常简单的问题,但我正在努力寻找解决方案。

我需要在/etc/aliases文件中自动查找和替换以下部分:

# Person who should get root's mail
#root:   marc
Run Code Online (Sandbox Code Playgroud)

它需要看起来像:

# Person who should get root's mail
root:  someone@something.tld
Run Code Online (Sandbox Code Playgroud)

我一直无法找到解决方案。大家能不能给点建议?没必要sed

cha*_*aos 5

在 GNU 系统上,你可以使用这个:

sed -i '/^#[[:blank:]]Person/{n;s/#root:[[:blank:]]\+marc/root:\tsomeone@something.tld/;}' file
Run Code Online (Sandbox Code Playgroud)

它搜索以 开头的行# Person。然后切换到下一行并替换#root:<blanks>marcroot:<tab> ...。该-i标志就地编辑文件。

-i,\+并且\t是 GNU 扩展。的标准等价物\+是更罗嗦的\{1,\}。要可移植地就地编辑文件,您需要求助于临时文件。标准的等价物\t是按字面插入制表符。