如何删除仅包含两个点的所有行(来自文本文件),以及点之间的随机数据。有些线条有三个或更多点,我需要它们留在文件中。我想用sed。
示例脏文件:
.dirty.dig
.please.dont.delete.me
.delete.me
.dont.delete.me.ether
.nnoooo.not.meee
.needto.delete
期望的输出:
.please.dont.delete.me
.dont.delete.me.ether
.nnoooo.not.meee
答案 0 :(得分:2)
在这里使用awk
会更简单
$ awk -F. 'NF!=3' ip.txt
.please.dont.delete.me
.dont.delete.me.ether
.nnoooo.not.meee
-F.
使用.
作为分隔符NF!=3
打印输入字段数不等于3
的所有行
abc.xyz
awk -F. 'NF>3' ip.txt
答案 1 :(得分:1)
sed '/^[^.]*\.[^.]*\.[^.]*$/d' file
输出:
.please.dont.delete.me .dont.delete.me.ether .nnoooo.not.meee
答案 2 :(得分:0)
我没有sed
方便地仔细检查,但是
/^[^.]*\.[^.]*\.[^.]*$/d
应该匹配并删除所有在它们之前和之间有非点字符串的两个点的行。
答案 3 :(得分:0)
这可能适合你(GNU sed):
sed 's/\./&/3;t;s//&/2;T;d' file
如果有3个或更多.
打印件。如果有2 .
删除。否则打印。
另一种方式:
sed -r '/^([^.]*\.[^.]*){2}$/d' file
答案 4 :(得分:0)
sed用于进行替换,只需 G 即可搜索 R egular E xpression和 P 结果是有一个专门为此目的设计的整个其他工具,甚至以它命名 - grep
。
grep -v '^[^.]*\.[^.]*\.[^.]*$' file
或使用GNU grep for EREs:
$ grep -Ev '^[^.]*(\.[^.]*){2}$' file
.please.dont.delete.me
.dont.delete.me.ether
.nnoooo.not.meee