使用grep和sed提取文件名和编号

使用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命令

我在当前目录中有一个文件列表,其中一些包含关键字“speed”,假设与关键字在同一行,我有一个数字

例如,在文件“
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
,输出应该是什么样子?