从行中grep一个数字并将其附加到文件中

时间:2013-04-23 10:28:36

标签: awk grep cat

我经历了几个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 /我试图从几个文件中获取数据并放入一个文件中以供以后绘图。

3 个答案:

答案 0 :(得分:7)

您的命令格式为:

grep ! input.txt | grep -Eo "[0-9]{1,}|\-[0-9]{1,}" >> output

grepgrep我们使用管道运算符|这可以让我们将命令链接在一起。要将此输出附加到文件,我们使用重定向运算符>>

然而,有一些问题。你写的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之内的任何内容,以及。和 - ,(其他一切)//无任何替换(即删除)并完成:)