Sed 查找包含UNIX路径的行并从文件中对其进行注释

Sed 查找包含UNIX路径的行并从文件中对其进行注释,sed,aix,Sed,Aix,我希望在文件中对包含“start/usr/lib/sendmail”$src_running”的行进行注释 $ grep /usr/lib/sendmail /tmp/tcpip # "/usr/lib/sendmail -bi" or "/usr/ucb/newaliases". start /usr/lib/sendmail "$src_running" "-bd -q${qpi}" $ grep /usr/lib/sendmail /tmp/tcpip # "/usr/lib/send

我希望在文件中对包含“start/usr/lib/sendmail”$src_running”的行进行注释

$ grep /usr/lib/sendmail /tmp/tcpip
# "/usr/lib/sendmail -bi" or "/usr/ucb/newaliases".
start /usr/lib/sendmail "$src_running" "-bd -q${qpi}"


$ grep /usr/lib/sendmail /tmp/tcpip
# "/usr/lib/sendmail -bi" or "/usr/ucb/newaliases".
#start /usr/lib/sendmail "$src_running" "-bd -q${qpi}"

sed无法搜索字符串,只能搜索regexp(请参阅),因此最好使用awk之类的工具,当您想匹配字符串时,它可以理解字符串:

$ awk -v str='start /usr/lib/sendmail "$src_running"' 'index($0,str){$0="#"$0} 1' file
# "/usr/lib/sendmail -bi" or "/usr/ucb/newaliases".
#start /usr/lib/sendmail "$src_running" "-bd -q${qpi}"

sed命令在这里也适用。 以下是一个示例解决方案:

sed -r 's|start /usr/lib/sendmail "\$src_running"|#&|' inputfile
解释:

-r
选项提供了扩展正则表达式,避免了大量引用。但是它是特定于Linux的,并且在其他sed版本中的可移植性较差

s
sed替换命令

|
搜索图案标记和替换图案标记

\$
quoted$,转义$regexp行尾锚点

#&替换模式,#是注释前缀,&是匹配的搜索模式


希望对你有用。

< P>由于股票AIX SED和AWK不提供现成的编辑,你可以考虑<代码> SED的前身,它是脚本化的,并且编辑文件,如果你喜欢这样的事情:

ed -s /tmp/tcpip << 'EOF'
/start \/usr\/lib\/sendmail "$src_running"/s/^/# /
w
q
EOF

这里的区别在于,我们要求seach再次锚定到行的开头(
^
),然后后跟零个或多个(
*
)字符,这些字符不是
(使用
[^.]
)。

sed
命令通常用于此。SE网络中有很多答案可以解决这个问题,也许其中一个可以帮助您。谢谢你,我仍在搜索/尝试找出答案,我知道让这种命令在AIXThank上工作有点困难。非常感谢,这很有效。我将把输出重定向到另一个文件,我将用“注释”输出覆盖原始文件。对,或者如果您使用GNU awk,您可以使用
-I inplace
。谢谢@Ed的好评。我据此修正了答案。
ed -s /tmp/tcpip << 'EOF'
/^[^#]*start \/usr\/lib\/sendmail "$src_running"/s/^/# /
w
q
EOF