2016-05-30 188 views
0

模式的所有行我有一个文件tmpFile包含:删除不匹配SED

wqf____32qwfe 
123412 
qqwef123414 
12039421 
... 

tmpFile有只有数字,可以包含任何字符,线条在其中,或线条。

我想保留只包含整数的行。 我该如何做到这一点?

回答

4

虽然你可以为此使用SED的工作就是 lobally搜索[R egular Ë上的表达和P RINT结果如此猜测的发明是为了做正是这个工作什么工具?

要打印仅包含数字线,GNU的grep是:

grep -E '^[0-9]+$' file 

或与任何的grep:

grep '^[0-9][0-9]*$' file 

要打印包含非数字线:

grep '[^0-9]' file 

打印不包含数字的行(包括空行):

grep -v '[0-9]' file 

要打印不包含非数字线(包括空行):

grep -v '[^0-9]' file 
+1

是的,非常有趣,这似乎真的是我想要做的。 'grep -E'^ [0-9] + $'tmpFile'和'grep'^ [0-9] [0-9] * $'tmpFile'为我想要做的工作!谢谢 – Simonlbc

1

可以禁止印刷图案的空间,只打印匹配的数字图案的线条,例如:

$ sed -n '/^[0-9]\+$/p' file 
123412 
12039421 
2
sed '/^[0-9]\+$/!d' tmpFile 

!反转的逻辑。请注意,\+不是符合POSIX的版本sed(例如BSD或Mac OS X sed)的基本功能的一部分。

sed '/^[0-9]\{1,\}$/!d' tmpFile 

这会工作,寻找一个或多个数字。

还有其他方法可以达到相同的整体效果,特别是在这个有限的环境中。如果您需要将其作为更大脚本的一部分来执行此操作,则这是您的要求的直接答案。

+1

同样可以通过重复图案'/^[0-9] [0-9]被归档* $ /!d' – andlrc