簡體   English   中英

如何從grep結果中提取文件名?

[英]How can I extract a file name from a grep result?

我正在嘗試獲取系統啟動時執行的所有程序的列表。

我的游戲計划如下:

  • grep -r /etc/init.d/etc/rc.d/*目錄
  • 搜索任何以“ /”開頭的行
  • 包括反引號和$()的執行
  • 假定通過指定完整路徑執行執行,而忽略相對路徑執行(即。/ ./...

為此,我使用了以下內容:

egrep -r '^\s*/|\$\(\s*/|\`\s*/' /etc/rc.d/* /etc/init.d

由於它是在目錄中搜索文件,因此結果將列出在其中找到的文件以及整行。 現在,我想將結果通過管道傳遞給某種文件,以獲取文件名,通過管道將管道傳遞給sort|uniq以獲取簡化列表。 我想我可以以某種方式使用awk,但是我對此並不熟悉。

結果示例:

/etc/init.d/foo:             foo=$(/bin/echo hello)
/etc/init.d/bar:             bar=$(/bin/echo world)
/etc/rc.d/init.d/foobar:     /bin/false

所需輸出:

/bin/echo
/bin/false

如果在egrep中添加-h選項,則不會顯示文件名。

egrep -hr '^\s*/|\$\(\s*/|\`\s*/' /etc/rc.d/* /etc/init.d | sed -e 's/\($(\|)\)//g'

sed regex將刪除所有的“ $(”和“)”

好的,感謝alb3rtobr的幫助,我能夠得到它:

egrep -hor '(^\s*/|\$\(\s*/|\`\s*/)[^ ]*' /etc/rc.d/* /etc/init.d | sed -e 's/\($(\|)\|^\s*\)//g' | sort | uniq  

我修改了egrep以繼續匹配,直到遇到空格為止,然后添加了-o選項以僅返回匹配的模式。 我還修改了sed以修剪前導空白。

編輯:更改為匹配模式,而不是空格字符

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM