[英]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.