我有一个名为file1.txt
. 我想删除包含“中心”、“农场”或“中间”等字样的每一行,但包含“①”或“城市”的行除外。
- 删除和例外的列表很长。
- 这些文件采用 UTF-8 格式。
如何删除至少包含其中一个单词的每一行,但不删除那些有一些例外的行?
这可能对您有用:
sed -i '/center of\|farm\|middle of/{/①\|city/!d}' file1.txt
或者
sed -i '/center of/ba
/farm/ba
/middle of/ba
b
:a
/①/b
/city/b
d' file1.txt
如果你有一个words.txt
和exceptions.txt
文件,使用这个:
sed '/\*exceptions\*/{h;s/.*/:a/p;d}
x
/./{x;s|.*|/&/b|p;$!d;s/.*/d/;q}
x
s|.*|/&/ba|' words.txt - <<<"*exceptions*" exceptions.txt > file.sed
sed -i -f file.sed file1.txt
sed -r '/①|city/{p;d};/center of|farm|middle of/d' file1.txt
sed '/blacklist/{/whitelist/p;d}' file
删除黑名单,除非它在白名单中:
echo -e "a b\nb c\nc d\nd e\ne f" | sed '/c\|d/{/a\|b/p;d}'
印刷
a b
b c
e f
即每一行,不包含 c 或 d,只有包含 a 或 b 时才包含 c 或 d 的行。