我经历了几个grep示例,但是没有看到如何执行以下操作。
说,我有一个带行的文件
! some test here and number -123.2345 text
我可以使用
获取此行grep ! input.txt
但是如何从这一行获得数字(可能是正数或负数)并将其附加到另一个文件的末尾?是否可以将grep应用于grep结果? 如果是,那么我可以通过像
这样的数字获得数字grep -Eo "[0-9]{1,}|\-[0-9]{1,}"
p / s /我正在使用OS-X
p / p / s /我试图从几个文件中获取数据并放入一个文件中以供以后绘图。
答案 0 :(得分:7)
您的命令格式为:
grep ! input.txt | grep -Eo "[0-9]{1,}|\-[0-9]{1,}" >> output
从grep
到grep
我们使用管道运算符|
这可以让我们将命令链接在一起。要将此输出附加到文件,我们使用重定向运算符>>
。
然而,有一些问题。你写的regexp更好:grep -Eoe '-?[0-9.]+'
这允许小数并返回单个数而不是两个,如果你想要以!
开头的行,那么grep ^!
最好避免匹配什么包含!
,但不是从它开始。更好:
grep '^!' input | grep -Eoe '-?[0-9.]+' >> output
答案 1 :(得分:0)
perl -lne 'm/.*?([\d\.\-]+).*/g;print $1' your_file >>anotherfile_to_append
答案 2 :(得分:0)
$foo="! some test here and number -123.2345 text"
$echo $foo | sed -e 's/[^0-9\.-]//g'
$-123.2345
编辑: -
表示文件,
[ ]$ cat log
! some test here and number -123.2345 text
some blankline
some line without "the character" and with number 345.566
! again a number 34
[ ]$ sed -e '/^[^!]/d' -e 's/[^0-9.-]//g' log > op
[ ]$ cat op
-123.2345
34
现在让我们看看牙签:) '/^[^!]/d'
/
模式的开头,^
没有(比如乘以假),[^!]
任意行以!
开头并d
删除。第二个表达式,[^0-9.-]
不匹配0到9之内的任何内容,以及。和 - ,(其他一切)//
无任何替换(即删除)并完成:)