2014-01-07 29 views
0

我想從一組文件中找到字符串Execution has sterted的出現,
說明存在於目錄/home/abc/output/中的三個文件。如何捕獲文件中的特定字符串

對於這一點,我目前使用下面的命令:

grep "Execution has sterted" /home/abc/output/* 

它輸出:

/home/abc/output/file1:line containing "Execution has sterted" 

/home/abc/output/file1~:line containing "Execution has sterted" 

/home/abc/output/file2:line containing "Execution has sterted" 

/home/abc/output/file2~:line containing "Execution has sterted 

/home/abc/output/file3:line containing "Execution has sterted" 

/home/abc/output/file3~:line containing "Execution has sterted" 

即使3個文件都在那裏,輸出由6行,與原來的路徑(s)和其他路徑以~結尾,如上所示。

我希望它顯示原始路徑的發生,而不是~
如何做到這一點?

謝謝大家,

它適合我。

我的實際查詢是,通過冠詞job perticular作業將運行,並將生成說3個日誌文件。每個日誌文件將包含語句,我需要catpure 2語句說grep「執行已執行」和「執行成功完成「。 一旦我得到兩個以上的陳述,然後只有我可以順利完成作業成功(因爲一些時間工作卡在某一點)

這是如何通過腳本來完成的? 我應該得到消息作業已完成或作業失敗

+0

'ls'的輸出是什麼?我傾向於認爲你在某些時候複製了你的文件,這些'〜'文件確實存在。除非存在這樣的文件,否則'grep'不會寫'/ home/abc/output/file1〜'。 – dimo414

回答

2
grep --exclude="*~" "search string" /path/* 
+0

嗨,如何從相同的日誌文件中捕獲2個字符串。對於我的第一個字符串是「作業已開始」,第二個字符串是「作業已成功完成」 – user3164140

3

~結尾的文件通常備份通過文本編輯器製作時,他們保存的文件。
最簡單的解決方案是通過做rm /home/abc/output/*~先刪除它們


如果你想留住他們,你能傳遞的--exclude=選項給grep。
這將使它排除匹配給定的glob模式的文件。

例如,你的情況:

grep --exclude="*~" "Execution has sterted" /home/abc/output/*

文件匹配*~將被排除在外。
(不要忘了,這樣會將它直接傳遞到grep來用引號括起來模式)

+0

嗨,如何從同一個日誌文件中捕獲2個字符串。對於我的第一個字符串是「Job has started」,第二個字符串是「Job completed successfully」 – user3164140

+0

您必須運行兩個單獨的grep命令,或者使用搜索表達式,例如'(Job has started)|(Job completed successfully) '。 –

1

爲了防止grep看見擺在首位的備份文件(消除對--exclude的需要),使用一個模式,它省略他們。

grep "Execution has sterted" /home/abc/output/*[!~] 

*[^~]也應該工作; POSIX(出於我不知道的原因)將正則表達式中使用的^替換爲否定字符,但bash支持這兩種。

+0

嗨,專家,這是如何可以在Windows中執行,即捕獲perticulare字符串說「工作已成功完成」文本文件(比如說4)存儲在特定路徑說c:\ CBA \ TEST – user3164140

相關問題