我的 /etc/aliases 文件需要编辑,但由于我在 100 多个主机上有相同的文件,我只想编写它的脚本并使其运行。我有几个别名条目,在其中一个条目中我想删除用户和逗号分隔符,如下所示:
alias_name1: [email protected],[email protected],[email protected]
alias_name2: [email protected],[email protected],[email protected]
所以如果我只想删除“,[电子邮件受保护]” 在“alias_name1”而不是“alias_name2”中,我该怎么做,因为我现在拥有的唯一示例是从整个文件中删除该字符串,或者从文件中的特定行中删除该字符串,因为某些文件具有不同数量的行也不起作用。
答案1
只删除但不删除
",[email protected]"
"alias_name1"
"alias_name2"
sed
方法:
sed -E '/^alias_name1/ s/,name2@example\.com(,?)/\1/' /etc/aliases
第一个捕获组的技巧(...)
也适用于数字位于行尾或中间的情况。,[email protected]
输出:
alias_name1: [email protected],[email protected]
alias_name2: [email protected],[email protected],[email protected]
答案2
您可以在sed
替换命令前面加上搜索参数:
sed '/search_string/ s/remove_string//'
上面的命令将仅对与/search_string/
正则表达式匹配的行进行操作,并用空字符串替换匹配的内容remove_string
。