使用grep和sed提取文件名和编号
我在当前目录中有一个文件列表,其中一些包含关键字“speed”,假设与关键字在同一行,我有一个数字 例如,在文件“使用grep和sed提取文件名和编号,sed,grep,Sed,Grep,我在当前目录中有一个文件列表,其中一些包含关键字“speed”,假设与关键字在同一行,我有一个数字 例如,在文件“filename.txt”中,我有以下几行: some text speed: this is the keyword, and equals 150 some text 我想结合使用grep和sed来获得以下输出: filename: 150 目前,我只能使用grep提取文件名和包含关键字的行,但我不知道如何使用grep和sed组合形成上述输出。到目前为止,我使用的grep命令
filename.txt
”中,我有以下几行:
some text
speed: this is the keyword, and equals 150
some text
我想结合使用grep
和sed
来获得以下输出:
filename: 150
目前,我只能使用grep
提取文件名和包含关键字的行,但我不知道如何使用grep
和sed
组合形成上述输出。到目前为止,我使用的grep
命令是:
grep -r "speed"
这给了我:
filename.txt:speed: this is the keyword, and equals 150
任何帮助都将不胜感激 如评论中所述
下面的命令将为您提供所需的输出
awk'/speed/{print FILENAME:“$NF}”FILENAME.txt
解释
- /使用speed/是因为它是用作提取参考的关键字
{打印文件名“$NF}
- 打印文件名将打印相应的文件名
- $NF表示字段数,使用NF和awk将打印最后一个字段的字符串或单词,该文本文件为150
:
字符,请尝试以下操作:
grep -r "speed" | sed -E 's/^([^:]+):[^0-9]*([0-9]+)/\1: \2/'
在sed
命令中:
匹配文件名,并将第一个捕获组分配给它^([^::]+)
匹配要跳过的非数字[^0-9]*
匹配数字,并为其分配第二个捕获组([0-9]+)
speed
的行始终在末尾有数字,请尝试awk'/speed/{print FILENAME:“$NF}”
如果在子目录中找到文件,并且/或者在名称中有额外的句点,例如,my/sub/dir/this.file.name.txt
,输出应该是什么样子?