unix shell搜索单词并删除单词后的2个单词

时间:2017-06-29 20:47:20

标签: shell unix awk sed

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;

4 个答案:

答案 0 :(得分:0)

始终编写尽可能具体的正则表达式;这样可以最大限度地降低匹配和破坏文件的匹配几率。在这种情况下,这意味着“不要只匹配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版本中都可用。

答案 1 :(得分:0)

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;
  • \< - 匹配单词的开头

  • [^[:space:]]* - 匹配除空格

  • 之外的任何字符

答案 2 :(得分:0)

使用-E的GNU或OSX sed启用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;

答案 3 :(得分:0)

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;