Regex 如何从grep结果中提取文件名?
我正在尝试获取系统启动时执行的所有程序的列表 我的游戏计划如下:Regex 如何从grep结果中提取文件名?,regex,bash,awk,sed,grep,Regex,Bash,Awk,Sed,Grep,我正在尝试获取系统启动时执行的所有程序的列表 我的游戏计划如下: grep-retc/init.d和/etc/rc.d/*目录 搜索任何明确以“/”开头的行 包括从backticks和$()执行 假设通过指定完整路径执行,忽略相对路径执行(即/…) 为此,我使用了以下方法: egrep -r '^\s*/|\$\(\s*/|\`\s*/' /etc/rc.d/* /etc/init.d 因为它在目录中搜索文件,所以结果会列出找到它的文件和完整行。现在,我想通过管道将结果导入到某个文件中,以
etc/init.d和grep-r
目录/etc/rc.d/*
- 搜索任何明确以“/”开头的行
- 包括从backticks和$()执行
- 假设通过指定完整路径执行,忽略相对路径执行(即
)/…
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
如果将-h选项添加到egrep,则不会显示文件名
egrep -hr '^\s*/|\$\(\s*/|\`\s*/' /etc/rc.d/* /etc/init.d | sed -e 's/\($(\|)\)//g'
sed regex将删除所有“$”(“and”)”好的,多亏了alb3rtobr的帮助,我才能够得到它:
egrep -hor '(^\s*/|\$\(\s*/|\`\s*/)[^ ]*' /etc/rc.d/* /etc/init.d | sed -e 's/\($(\|)\|^\s*\)//g' | sort | uniq
我修改了egrep以继续匹配,直到遇到空格,然后添加了-o
选项以仅返回匹配的模式。我还修改了sed以修剪前导空格
编辑:更改为匹配图案,而不是空格字符