【问题标题】:sed command does not replace entire stringsed 命令不会替换整个字符串
【发布时间】:2016-10-30 06:24:08
【问题描述】:

我的字符串如下:

[ -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 命令在替换过程中只占用了字符串的一半以及如何替换该字符串中的单词?

【问题讨论】:

    标签: string bash sed


    【解决方案1】:

    你可以这样做:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 2021-05-16
      • 2021-10-28
      • 1970-01-01
      • 2016-11-12
      相关资源
      最近更新 更多