【问题标题】:Add line after matching a pattern [duplicate]匹配模式后添加行[重复]
【发布时间】:2017-12-28 14:58:51
【问题描述】:

我有一个文件说 test 具有以下值

Linux
Solaris
Fedora
Ubuntu
AIX
HPUX

如何在匹配 AIX 的行之后添加带有系统主机名的行?如果我这样做了

echo `hostname` >> test

系统主机名在 HPUX 之后。

【问题讨论】:

    标签: bash awk sed echo


    【解决方案1】:

    您能否尝试关注awk,如果这对您有帮助,请告诉我。

     awk -v host=$(hostname) '$0 == "AIX"{print $0 RS host;next} 1'  Input_file
    

    编辑:在这里也添加 1 个解决方案。

    awk -v host=$(hostname) '{printf("%s%s\n",$0,$0=="AIX"?RS host:"")}'
    

    【讨论】:

    • 对不起,我的意思是在 AIX 之后追加到下一行
    • @gosatriani,现在更改了代码,请检查并告诉我这是否对您有帮助。
    • 不错的便携式解决方案,不仅限于 sed 版本! (例如,也适用于 mac)
    • 谢谢!实际上,我刚刚意识到您的 awk 脚本与“AIX”模式的行不匹配,而是与“AIX”相同的行。根据该主题的标题,在您的答案中附加“~”而不是“==”比较器可能会很有用。
    • @al-ash,因为答案是旧的,我现在不编辑它,根据你的建议,我在这里添加它以供将来用户参考awk -v host=$(hostname) '{printf("%s%s\n",$0,$0~/^AIX$/?RS host:"")}'欢呼。
    【解决方案2】:

    使用 sed:

    sed "s/^AIX$/& $(hostname)/" file
    

    如果该行可以包含 AIX

    sed "s/AIX.*/& $(hostname)/" file
    

    编辑:

    要在匹配行后附加主机名,请尝试a(append) 命令:

    sed "/^AIX$/a $(hostname)" file
    

    【讨论】:

    • 对不起,我的意思是在 AIX 之后追加到下一行
    • 我编辑了我的答案。
    猜你喜欢
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多