我尝试创建一个脚本,将 oracleserver 附加到 / etc / hosts 作为 localhost 的别名。这意味着我需要:
^127.0.0.1
和不 oracleserver$
oracleserver
追加到此行我知道最佳做法可能是使用负向前看。但是, sed 没有环顾四周的功能:What's wrong with my lookahead regex in GNU sed?。任何人都可以为我提供一些可能的解决方案吗?
答案 0 :(得分:2)
只需将awk与&&
结合使用即可合并两个条件:
awk '/^127\.0\.0\.1/ && !/oracleserver$/ { $0 = $0 "oracleserver" } 1' file
当第一个模式匹配但第二个模式不匹配时,会附加字符串。最后的1
始终为 true ,因此awk会打印每一行(默认操作为{ print }
)。
答案 1 :(得分:0)
我不会使用sed
而是使用perl
:
找到^ 127.0.0.1和NOT oracleserver $
的行perl -pe 'if ( m/^127\.0\.0\.1/ and not m/oracleserver$/ ) { s/$/oracleserver/ }'
应该做的伎俩。您也可以将-i.bak
添加到就地编辑中。