Sed 删除包含两个点且点与点之间有字符的行
我如何删除所有只包含两个点的行(从文本文件中),点之间有随机数据。有些行有三个或更多的点,我需要它们保留在文件中。我想用sed 脏文件示例:Sed 删除包含两个点且点与点之间有字符的行,sed,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 输出: .pleas
.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
输出:
.please.dont.delete.me
.dont.delete.me.ether
.nnoooo.not.meee
请不要删除我
.Don.delete.me.ether
.nnooo.not.meee
请参阅:我没有一个可以反复检查的
sed
,但是
/^[^.]*\.[^.]*\.[^.]*$/d
应该匹配并删除所有在它们之前和之间有两个非点字符串的点的行。在这里使用
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
- 这将保留像
打印。如果有2个
删除。否则打印
另一种方式:
sed -r '/^([^.]*\.[^.]*){2}$/d' file
sed是用来进行替换的,只需G全局搜索RegularExpression和print,结果就是有一个完整的其他工具专门为此设计,甚至以它命名-
grep
grep -v '^[^.]*\.[^.]*\.[^.]*$' file
或使用GNU grep进行ERE:
$ grep -Ev '^[^.]*(\.[^.]*){2}$' file
.please.dont.delete.me
.dont.delete.me.ether
.nnoooo.not.meee
-r
只能在GNU-sed中使用,而-E
可以在GNU和OSX sed中使用,因此使用-E
比使用-r
更便于携带。当我手动运行时效果很好,但是从bash脚本来看,它不起作用。很抱歉,我的数据在行尾有一些连字符,这些字符相互干扰,这实际上工作得非常好。我很抱歉,我的数据在行尾有一些连字符,它们相互干扰,这实际上工作得非常好。我很抱歉,我的数据在行尾有一些连字符,它们相互干扰,这实际上工作得非常好。
grep -v '^[^.]*\.[^.]*\.[^.]*$' file
$ grep -Ev '^[^.]*(\.[^.]*){2}$' file
.please.dont.delete.me
.dont.delete.me.ether
.nnoooo.not.meee