【问题标题】:sed + awk + verify line in filesed + awk + ​​验证文件中的行
【发布时间】:2010-07-22 15:29:32
【问题描述】:

我有以下示例文件

    /etc/sysconfig/network/script.sh = -exe $Builder
    run_installation 123 44 556 4 = run_installation arg1 arg2 arg3 948
    EXE=somthing
    EXE somthing

我有三个问题(我写 bash 脚本)

  1. 如何通过 sed 或 awk 验证字符串“-exe”是否存在于“=”字符之后
  2. 如何通过 sed 或 awk 验证字符串 run_installation 是否存在于行首(行中的第一个单词)和“=”字符之后,如下例(文件)

  3. 文件中的字符串 EXE 可以是 "EXE" 也可以是 "EXE=" ,如何通过 sed 删除 EXE 或 EXE=

    我愿意:

    sed s'/EXE//g' | sed s'/EXE=//g'
    

    但在我的 bash 脚本中这样做并不是很好的方式

• 我需要三个不同的答案!

莉迪亚

【问题讨论】:

    标签: sed


    【解决方案1】:

    如果没有找到条件 1 和 2,您没有给出进一步的标准...

    awk '/=.*-exe/{f=1;}
    /^run_installation.*=.*run_installation/{g=1}
    /^EXE/{ gsub(/EXE=|EXE/,"") }
    f && g{ print "ok" ;exit }
    ' file
    

    上面的代码检查条件 1 和条件 2 并在两者都找到时打印“ok”。为了说明的目的,添加了 EXE 对条件 3 的替换。更清楚地说明您想做什么,并在下次显示您的预期输出

    要分别验证,

    awk '/= -exe/{print "found"}' file
    awk '/^run_installation.*=.*run_installation/{print "found"}' file
    

    【讨论】:

    • 对不起,它应该是三个答案,而不是一个答案的所有案例
    • 什么 3 个答案?我不明白。只需 1 个 awk 进程即可完成所有条件。使用示例输入和输出示例定义并清楚地解释您希望做什么。
    • 每个答案必须分开,我不希望所有答案都放在一个 awk 上
    • 另一个问题,如果 run_installation 作为行中的第一个字符串存在,但不存在于行的乞求中(行乞与 run_installation 之间的空格),那么新语法是什么?
    猜你喜欢
    • 2014-02-02
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    相关资源
    最近更新 更多