2016-04-21 218 views
-1

我很努力地找到一个sed命令来删除文本文件中不包含标点符号(任何类型)的所有行,而无需手动执行每一行。sed命令删除所有不包含标点符号的行

例如:

111.222.123.234 
222.11.34.54 
word     # To remove 
www.facebook.com 
www.stackoverflow.com 
another    # To remove 
[email protected] 

是否这样的命令存在吗?

+1

你真的尝试任何事情,这是非常基本的,而且容易被搜索到。 – 123

回答

2

可以使用[:punct:]字符类,它对应于

[!"#$%&'()*+,-./:;<=>[email protected][\]^_`{|}~] 

和否定它:

$ sed '/[[:punct:]]/!d' infile 
111.222.123.234 
222.11.34.54 
www.facebook.com 
www.stackoverflow.com 
[email protected] 

或者,而不是否定匹配,否定直接字符类:

sed '/[^[:punct:]]/d' 

或者不打印任何东西,除非行确实包含一个标点符号:

sed -n '/[[:punct:]]/p' 

或者使用grep而不使用sed:

grep '[[:punct:]]' infile 
+0

即使grep与该正则表达式工作:'grep'[[:punct:]]'文件名' –

+0

@glennjackman而且可能会更快!介意我是否添加它? –

+0

随意..... –