2012-05-07 65 views
20

我想在多個文件中查找一個單詞,並且每個結果或有限數量的字符(例如40〜80個字符)僅返回一行,而不是整行,如默認。grep有限字符 - 一行

grep -sR 'wp-content' . 

file_1.sql:3309:blog/wp-content 
file_1.sql:3509:blog/wp-content 
file_2.sql:309:blog/wp-content 

目前我看到以下內容:

grep -sR 'wp-content' . 

file_1.sql:3309:blog/wp-content-Progressively predominate impactful systems without resource-leveling best practices. Uniquely maximize virtual channels and inexpensive results. Uniquely procrastinate multifunctional leadership skills without visionary systems. Continually redefine prospective deliverables without. 
file_1.sql:3509:blog/wp-content-Progressively predominate impactful systems without resource-leveling best practices. Uniquely maximize virtual channels and inexpensive results. Uniquely procrastinate multifunctional leadership skills without visionary systems. Continually redefine prospective deliverables without. 
file_2.sql:309:blog/wp-content-Progressively predominate impactful systems without resource-leveling best practices. Uniquely maximize virtual channels and inexpensive results. Uniquely procrastinate multifunctional leadership skills without visionary systems. Continually redefine prospective deliverables without. 
+0

http://theunixshell.blogspot.in/2012/12/print-first-80-characters-in-line.html – Vijay

回答

17
egrep -Rso '.{0,40}wp-content.{0,40}' *.sh 

這不會調用無線電交響樂團,而是-o(非常匹配)。

模式前後最多40個字符。注:* e * grep。

+0

很好,謝謝。 –

+1

'egrep'現已被棄用。改用'grep -E'。 – ruuter

+0

@ruuter:在我最近的linux(xubuntu 15.10)中,egrep是'exec grep -E「$ @」'。 AFAIK這是很長一段時間的情況。 –

4

如果你改變了正則表達式'^.*wp-content'您可以使用egrep -o。例如,

egrep -sRo '^.*wp-content' . 

-o標誌作出的egrep只打印出相匹配的線的部分。因此,從行首到wp-content的匹配應該在您的第一個代碼塊中產生樣本輸出。

+0

我可能沒有正確理解該命令,但沒有工作,他仍列出相同的辦法。 –

+0

如果你的內容是你的例子中的內容,它應該輸出所有內容到'wp-content',而沒有任何東西超過這個。這應該是你的第一個代碼塊中的相同輸出。然而,從其他答案來看,這可能是也可能不是你真正想要的。 –

+0

@PatrickMaciel查看我的更改。我擴展了對'-o'標誌的解釋。 –

16

你可以使用grep的組合和削減

使用你的榜樣,我會用:

grep -sRn 'wp-content' .|cut -c -40 
grep -sRn 'wp-content' .|cut -c -80 

這將分別給你的第一個40或80個字符。

編輯:

而且,那裏有在grep的一個標誌,你可以使用:

-m NUM, --max-count=NUM 
      Stop reading a file after NUM matching lines. 

這有什麼,我以前寫過的組合:

grep -sRnm 1 'wp-content' .|cut -c -40 
grep -sRnm 1 'wp-content' .|cut -c -80 

這應該給你第一次出現每個文件,只有前40或80個字符。

+0

我更喜歡這個選項,因爲你不需要修改你的正則表達式。 –