删除所有与sed模式不匹配的行

时间:2016-05-30 15:11:32

标签: bash sed grep

我有一个文件tmpFile,其中包含:

wqf____32qwfe
123412
qqwef123414
12039421
...

tmpFile中,有些行只有数字,或者行可以包含任何类型的字符。

我想保留只包含整数的行。 我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:4)

虽然你可以使用sed来做这个,但是 G 的工作是逐步搜索 R egular E xpression和 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 :(得分:2)

sed '/^[0-9]\+$/!d' tmpFile

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

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

这样可以找到一个或多个数字。

还有其他方法可以实现相同的整体效果,尤其是在这种有限的背景下。如果您需要将此作为更大脚本的一部分,这可以直接回答您的要求。

答案 2 :(得分:1)

您可以禁止打印图案空间,只打印与数字图案匹配的行,例如:

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