【问题标题】:Search and replace one line with multiple lines in a unix script在unix脚本中搜索并用多行替换一行
【发布时间】:2021-07-05 03:45:03
【问题描述】:

我有下面的脚本,其中包含各种命令,我需要用一些新内容修改/替换一行,并在上方添加注释说明更改的原因。

当前脚本如下所示:

some random commands
some random commands
some random commands
some random commands
some random commands

OLM_VARIABLE=="-XYZ2048m ${OLM_VARIABLE} -XX:MaxBlahspaceSize=256m"

some random commands
some random commands
some random commands
some random commands
some random commands

预期的输出如下:

预期输出:

some random commands
some random commands
some random commands
some random commands
some random commands

##
# 2021-04-09 first comment line here
# 2021-04-09 second comment line here
##
OLM_VARIABLE="-XYZ2048m ${OLM_VARIABLE} -XX:MaxBlahspaceSize=512m -Dxyz.updateBlahConnectTimeout=10 -Dxyz.masterUpdateTimeInterval=123456"

some random commands
some random commands
some random commands
some random commands
some random commands

到目前为止我尝试了什么:

方法一:

sed -i.bak $'s/OLM_VARIABLE=="-XYZ2048m ${OLM_VARIABLE} -XX:MaxBlahspaceSize=256m"/##\\\n#  2021-04-09 first comment line here \\\n# 2021-04-09 second comment line here \\\n##\\\nOLM_VARIABLE="-XYZ2048m ${OLM_VARIABLE} -XX:MaxBlahspaceSize=512m -Dxyz.updateBlahConnectTimeout=10 -Dxyz.masterUpdateTimeInterval=123456"/g'

输出:

sed: -e expression #1, char 104: unknown option to `s'

方法二:

插入_this.txt:

##
# 2021-04-09 first comment line here
# 2021-04-09 second comment line here
##
OLM_VARIABLE="-XYZ2048m ${OLM_VARIABLE} -XX:MaxBlahspaceSize=512m -Dxyz.updateBlahConnectTimeout=10 -Dxyz.masterUpdateTimeInterval=123456"

我正在尝试使用上面的文件insert_this.txt,其中包含将用于替换的内容:

awk '/OLM_VARIABLE=="-XYZ2048m ${OLM_VARIABLE} -XX:MaxBlahspaceSize=256m"/{system("cat insert_this.txt");next}1' file > file_new

输出:没有任何反应。原始文件保持原样

但他们都没有帮助实现我想要的。有人可以帮我吗?提前致谢。

【问题讨论】:

    标签: regex unix awk sed


    【解决方案1】:
    $ awk 'NR==FNR{repl = (NR>1 ? repl ORS : "") $0; next} /^OLM_VARIABLE/{$0=repl} 1' insert_this.txt file
    some random commands
    some random commands
    some random commands
    some random commands
    some random commands
    
    ##
    # 2021-04-09 first comment line here
    # 2021-04-09 second comment line here
    ##
    OLM_VARIABLE="-XYZ2048m ${OLM_VARIABLE} -XX:MaxBlahspaceSize=512m -Dxyz.updateBlahConnectTimeout=10 -Dxyz.masterUpdateTimeInterval=123456"
    
    some random commands
    some random commands
    some random commands
    some random commands
    some random commands
    

    【讨论】:

    • 非常感谢。它工作得很好......你介意解释一下上面的awk命令吗..我对awk很陌生..只是想更好地理解这一点。提前致谢。
    • 当它读取第一个文件时,它会使用该文件中的每一行填充一个名为 repl 的变量,当它在第二个文件中找到 OLM_VARIABLE 时,它会打印该变量而不是该行。
    • Supercool.. 非常感谢您的解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2013-10-18
    • 2015-08-24
    • 2021-02-18
    相关资源
    最近更新 更多