2013-07-12 26 views
1

我試圖grep輸出未知文本和每行目錄的命令的輸出。下面是我的意思的例子:grep從發現字的開始到字的結尾

.MHuj.5.. /var/log/messages 

文字和目錄可能會不時地或系統而不同。我想做的所有事情都能夠將目錄grep出來並將其發送給一個變量。

我環顧四周,但無法弄清楚如何grep到一個單詞的結尾。我知道我可以開始尋找一個「/」的搜索短語,但是我不知道如何告訴grep在這個單詞的末尾停下來,或者如果它會考慮下一個「/」一個新單詞。列出的目錄可能會改變,所以我不能假設每次都會列出相同數量的目錄。在某些情況下,會列出多行,每個行在其輸出中都會有一個目錄列表。感謝您的任何幫助,您可以提供!

回答

1

如果你的目錄路徑沒有空格,那麼你可以這樣做:

$ echo '.MHuj.5.. /var/log/messages' | awk '{print $NF}' 
/var/log/messages 
+0

擊敗你:) – djf

+0

我把命令輸出到awk'{print $ NF}',並且它成功找到了該目錄。它也爲輸出添加了一個新的空白行。有沒有辦法得到awk命令的輸出而不在輸出的底部添加新行?謝謝! – bkstack

+0

@ user2569472試試'awk'$ NF〜/ \ // {print $ NF}'' –

0

你的線可以被描述爲:

^\S+\s+(\S+)$ 

這是假設的空白是隨機的文字和目錄之間的分隔符。它只是將空白與非空白分開並捕獲第二部分。

或者你可能想看看字邊界字符類:\b

+0

基本POSIX'grep'不支持這些Perl的模式,但是如果你有'grep的-P',更多的權力給你。 – tripleee

+0

我試過了,但沒有奏效。該命令運行,但沒有輸出。 – bkstack

1

從一個例子我們是否可以概括說明第一次出現斜線標記了要提取的數據的開始。如果擁有,嘗試

grep -o '/.*' file 

,以獲取最後一個空格之後的一切,儘量

grep -o '[^ ]*$' file 

對於更高級的模式匹配和提取,也許看sed,或在awk或Perl或Python。

+0

你的第一個例子工作,謝謝! – bkstack

0

我知道你說用grep,但我不能不提,這是平凡的做用awk:

awk '{ print $NF }' input.txt 

這是假設有一個空格是分隔符,並且路徑不包含任何空格。

相關問題