bash脚本从中间删除双引号并将其添加到行尾

  • 本文关键字:添加 脚本 中间 删除 bash sed
  • 更新时间 :
  • 英文 :


我有一个下面一行的文件。

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 's/"$/ http.proxyHost=172.0.0.128"/' <<< 'JAVA_OPTS="$JAVA_OPTS -/opt/linux/agent.jar -max=5000"'

用额外的proxyhost数据加上结束双引号替换行末的双引号。

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

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

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

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

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

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

如果变量PROXYHOST的内容包含sed的特殊字符(如/&),则必须通过前置进行转义。

我会用

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

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

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

最新更新