【问题标题】:bash script to Remove double quote from middle and add it at the end of the linebash脚本从中间删除双引号并将其添加到行尾
【发布时间】:2021-05-27 21:02:53
【问题描述】:

我有下面一行的文件。

JAVA_OPTS="$JAVA_OPTS -/opt/linux/agent.jar -max=5000" http.proxyHost=172.0.0.128

我使用下面的命令将 proxyHost 附加到行尾,使用下面的命令可以正常工作,但我想从中间删除双引号并将其添加到末尾,请帮助我。

sed -i '' -e '/^#/!s/agent\.jar.*/& http.proxyHost='"$PROXYHOST"'/' $_FILE

输出应如下所示:

JAVA_OPTS="$JAVA_OPTS -/opt/linux/agent.jar -max=5000 http.proxyHost=172.0.0.128"

【问题讨论】:

    标签: sed


    【解决方案1】:

    我会用

    sed -E 's/(.*)"/\1/; s/$/"/'
    

    第一部分删除了 last 引号,因为 .* 是贪婪的。
    然后在行尾添加双引号。

    perl -pe 's/.*\K"//; s/$/"/' 工作方式相同

    【讨论】:

      【解决方案2】:

      对于文件中的每一行,此sed 单行符会将最后一个" 字符移动到行尾。

      sed 's/"\([^"]*\)$/\1"/' file
      

      如果您只想编辑以JAVA_OPTS=" 开头的行,请使用

      sed '/^JAVA_OPTS="/s/"\([^"]*\)$/\1"/' file
      

      或者,如果您想将$PROXYHOST 正确附加到原始文件中以JAVA_OPTS= 开头的行:

      sed '/^JAVA_OPTS="/s/"$/'" $PROXYHOST"'"/' file
      

      如果变量PROXYHOST 的内容包含sed 特有的字符(例如/&),则必须在前面加上\ 对其进行转义。

      【讨论】:

        【解决方案3】:

        尝试以下方法:

        sed 's/"$/ http.proxyHost=172.0.0.128"/' <<< 'JAVA_OPTS="$JAVA_OPTS -/opt/linux/agent.jar -max=5000"'
        

        用附加的代理主机数据加上结束双引号替换行尾的双引号。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-30
          • 1970-01-01
          • 2015-07-26
          • 1970-01-01
          • 2020-07-27
          • 2017-02-13
          • 2017-11-30
          • 1970-01-01
          相关资源
          最近更新 更多