sed命令不替换整个字符串

时间:2016-06-28 05:10:33

标签: string bash sed

我的字符串如下:

[ -f /sbin/runuser ] && eval '/sbin/runuser - root -c "/etc/init.d/vcs -start"' || /bin/su - root -c "/etc/init.d/vcs -start"

更换字符串后,我需要输出如下:

[ -f /sbin/runuser ] && eval '/sbin/runuser - myuser -c "/etc/init.d/vcs -start"' || /bin/su - root -c "/etc/init.d/vcs -start"

在sed命令的帮助下,我试图替换相同的,但它只是替换了一半的字符串。我使用了以下命令:

sed s@"/sbin/runuser .* -c \"${RC_VCS}"@"/sbin/runuser - $myuser -c \"${RC_VCS}"@g

${RC_VCS}/etc/init.d/vcs$myuserdummy

我的输出结果如下:

[ -f /sbin/runuser ] && eval '/sbin/runuser - dummy -c "/etc/init.d/vcs -start"

任何人都可以帮助我,为什么sed命令只是在替换期间占用了一半的字符串以及如何替换该字符串中的单词?

1 个答案:

答案 0 :(得分:0)

你可以这样做:

sed -E 's#(/sbin/runuser - )[^ ]+#\1runuser#' file.txt

当字符root前面有myuser时,它将仅用root替换字符串/sbin/runuser -的实例。