【问题标题】:unix shell to search for word and delete 2 words after the wordunix shell 搜索单词并删除单词后的 2 个单词
【发布时间】:2017-12-03 17:19:06
【问题描述】:
sed '/KEYWORD/,$d'

输入:

ALTER TABLE TEMP ADD CONSTRAINT temp_pk PRIMARY KEY (temp_id) DISABLED;
ALTER TABLE TEMP2 ADD CONSTRAINT temp_pk2 PRIMARY KEY (temp_id) DISABLED;

需要用单词ADD搜索文件中的所有行并删除接下来的两个单词

需要的输出是:

ALTER TABLE TEMP ADD  PRIMARY KEY (temp_id) DISABLED;
ALTER TABLE TEMP2 ADD PRIMARY KEY (temp_id) DISABLED;

【问题讨论】:

    标签: shell unix awk sed


    【解决方案1】:

    始终编写尽可能具体的正则表达式;这可以最大限度地减少匹配您不想匹配的内容和损坏文件的几率。在这种情况下,这意味着“不要只匹配 ADD,还要匹配 ADD CONSTRAINT foo PRIMARY KEY。”

    perl -pe 's/\bADD\s+CONSTRAINT\s+[a-zA-Z0-9_]+\s+PRIMARY\s+KEY\b/ADD PRIMARY KEY/g'
    

    这使用 perl 而不是 sed 来获得更强大的正则表达式;具体来说,\b\s+ 符号并非在所有版本的 sed 中都可用。

    【讨论】:

    • 如果我的文件名是 test.sql .如何放在上面以更改整个文件
    • sed 相同:将< test.sql > test-edited.sql 放在命令行末尾。
    【解决方案2】:

    sed解决方案:

    sed -i 's/\<ADD [^[:space:]]* *[^[:space:]]*/ADD/' file
    

    file修改后的内容:

    ALTER TABLE TEMP ADD PRIMARY KEY (temp_id) DISABLED;
    ALTER TABLE TEMP2 ADD PRIMARY KEY (temp_id) DISABLED;
    

    • \&lt; - 匹配单词的开头

    • [^[:space:]]* - 匹配除空格以外的任何字符

    【讨论】:

      【解决方案3】:

      使用 GNU 或 OSX sed 为 -E 启用 ERE:

      $ sed -E 's/(ADD)\s\S+\s\S+/\1/' file
      ALTER TABLE TEMP ADD PRIMARY KEY (temp_id) DISABLED;
      ALTER TABLE TEMP2 ADD PRIMARY KEY (temp_id) DISABLED;
      

      【讨论】:

        【解决方案4】:

        awk当然:

        $ awk -v key="ADD" '$0~" " key " " {for(i=1;i<=NF;i++) {
                                            printf "%s%s", $i, i==NF ? ORS:OFS
                                            if ($i==key) i+=2}}' file
        ALTER TABLE TEMP ADD PRIMARY KEY (temp_id) DISABLED;
        ALTER TABLE TEMP2 ADD PRIMARY KEY (temp_id) DISABLED;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-14
          • 1970-01-01
          • 2018-03-17
          • 1970-01-01
          • 1970-01-01
          • 2020-07-29
          • 1970-01-01
          相关资源
          最近更新 更多