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;
答案 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;