2013-04-23 75 views
3

我經歷了幾個grep示例,但沒有看到如何執行以下操作。從行中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 /我想要來從多個文件數據並放入一個單一的文件以供日後繪圖。

回答

7

與命令格式是:從grep

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

grep,我們使用管道運營商|這讓我們鏈命令組合在一起。要將此輸出附加到文件,我們使用重定向運算符>>

但是有幾個問題。您正則表達式寫得更好:grep -Eoe '-?[0-9.]+'這允許小數點,並返回單個數字而不是兩個,如果您想要以!開頭的行,那麼grep ^!最好避免與包含!但不以它開頭的行匹配。更好地做到:

grep '^!' input | grep -Eoe '-?[0-9.]+' >> output 
+1

您打算在示例中允許小數點嗎? '123.234'怎麼樣? – 2013-04-23 10:34:27

+0

感謝您的回答,幾乎可行。但是在os-x上「 - ?」似乎不被允許。當我使用「[0-9] {1,} | \ - [0-9] {1,}」我有兩個數字 - 在「。」之前和之後。 – Denis 2013-04-23 10:37:25

+0

@Denis是的,如果忘記了,如果模式以'-'開始,會導致問題。修正是使用'-e'。請參閱編輯。 – 2013-04-23 10:38:06

0
perl -lne 'm/.*?([\d\.\-]+).*/g;print $1' your_file >>anotherfile_to_append 
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'/開始圖形,^不(如乘以假),[^!] anyline開頭!d刪除。第二個表達式,[^0-9.-]不匹配0到9之間的任何內容,以及。和 - ,(其他所有)//替換爲空(即刪除)並完成:)

+0

你不需要在字符類中轉義'.',除非你在問題的上下文中顯示它是如何使用的,否則這不會有太大的幫助。 – 2013-04-23 10:44:15

相關問題