2012-11-15 63 views
1

我有一個大的日誌文件,我需要從中提取文件名。如何在文本文件中的第一個空格之後刪除每行中的所有字符?

文件看起來是這樣的:

/path/to/loremIpsumDolor.sit /more/text/here/notAlways/theSame/here 
/path/to/anotherFile.ext /more/text/here/differentText/here 
.... about 10 million times 

我需要提取這樣的文件名:

loremIpsumDolor.sit 
anotherFile.ext 

我想,我的第一個策略是找到/替換所有/path/to/'。但我堅持如何刪除空間後的所有字符。

你能幫忙嗎?

回答

3
sed 's/ .*//' file 

它不再需要。當然,轉換的輸出顯示在標準輸出上。

+0

嗯......正則表達式的第一個空格後剝離?不會期望從你那裏;-) –

+0

蠻力'sed'行動;我喜歡。 Windows默認情況下不提供諸如sed,grep,awk等強大的文本處理工具是一種遺憾。這些是系統管理員(IMHO)的麪包工具。 – Will

+1

我不喜歡'cut',因爲它的標準([POSIX](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cut.html))版本不處理字段之間的一個或多個分隔符; GNU'cut'具有必要的'-i'選項,但我不能總是依靠GNU'cut'。當然,這不是一個特定任務的問題,但如果你不使用工具,因爲它不總是工作,你不使用它。我發現'sed'更易於使用,但是有多種工具可以使用('awk','perl','python''都可以很容易地使用,但是它們比所需的更復雜。 –

2

它傳遞給cut

cut '-d ' -f1 yourfile 
+0

您不需要輸入重定向,儘管在這裏沒有任何危害,只有一個文件需要處理。 –

+0

@JonathanLeffler,真實。提交後甚至想到它。我會編輯它。 –

2

在理論上,你也可以使用awk從每行搶的文件名如:

awk '{ print $1 }' input_file.log 

那當然,假設不存在任何文件名中的空格。 awk默認爲查找空格作爲字段分隔符,因此上面的代碼段會從每個行的日誌文件(您的文件名)中獲取第一個「字段」並輸出它。

+0

啊,但在我的真實日誌文件中實際上有空格。但我喜歡這個方向。實際上它更像'textHere thenSpaces /path/to/file.ext/more/text/here'。我沒有提到它,因爲我想我必須找到/替換第一部分無論如何(因爲它總是相同的)。 – Ryan

+0

@瑞恩:沒有汗水;你只需要使用'print $ 2',因爲它會成爲第二個字段。 'awk'對於這樣的事情來說是一個方便的工具,並且使用它的值得相當好。 – Will

0

僅bash的解決方案:

while read path otherstuff; do 
    echo ${path##*/} 
done < filename 
相關問題