删除包含两个点的线条,点之间有字符

时间:2017-04-15 07:22:22

标签: sed

如何删除仅包含两个点的所有行(来自文本文件),以及点之间的随机数据。有些线条有三个或更多点,我需要它们留在文件中。我想用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

5 个答案:

答案 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
    • 等行
    • 仅保留超过2个点的行,请使用awk -F. 'NF>3' ip.txt

答案 1 :(得分:1)

sed '/^[^.]*\.[^.]*\.[^.]*$/d' file

输出:

.please.dont.delete.me
.dont.delete.me.ether
.nnoooo.not.meee

请参阅:The Stack Overflow Regular Expressions FAQ

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