2012-04-22 175 views

回答

3

这可能会为你工作:

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.txtexceptions.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 
2
sed -r '/①|city/{p;d};/center of|farm|middle of/d' file1.txt 
+0

我总是有点怀疑先做错了什么,然后再修复它......在这种情况下,重复行然后删除原来的。这是没有必要的。您可以使用'b'(如在potong的答案中)。 – hvd 2012-04-22 08:14:32

1
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}' 

打印含有C或D仅当

a b 
b c 
e f 

这是每一个线路,它不含有c或d,以及线它们包含a或b。

+0

这将复制诸如“这是一个城市”等行。 – hvd 2012-04-22 18:34:12

+0

@hvd:你说的没错!我纠正了我现在的脚本,但与kev的解决方案不一样。 – 2012-04-22 19:55:45

相关问题