删除包含两个点的行,点之间带有字符

  • 本文关键字:之间 字符 包含两 删除 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
在这里

使用会更简单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
sed '/^[^.]*.[^.]*.[^.]*$/d' file

输出:

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

请参阅: 堆栈溢出正则表达式常见问题解答

sed 用于进行替换,只需 Globally 搜索 Regular Expression 和 Print 结果,还有一个完全不同的工具专门为此目的设计,甚至以它命名 - grep .

grep -v '^[^.]*.[^.]*.[^.]*$' file

或使用 GNU grep for ERE:

$ grep -Ev '^[^.]*(.[^.]*){2}$' file
.please.dont.delete.me
.dont.delete.me.ether
.nnoooo.not.meee

我没有方便sed来仔细检查,但是

/^[^.]*.[^.]*.[^.]*$/d

应匹配并删除所有在它们之前和之间有两个点且非点字符串的行。

这可能对你有用(GNU sed(:

sed 's/./&/3;t;s//&/2;T;d' file

如果有 3 个或更多.打印。如果有 2 个.删除。否则打印。

另一种方式:

sed -r '/^([^.]*.[^.]*){2}$/d' file

最新更新