Bash grep和sed在文件中捕获参数

Bash grep和sed在文件中捕获参数,bash,shell,scripting,sed,Bash,Shell,Scripting,Sed,我有一行,其中有一些参数,我想抓住。最好的方法是什么 示例行是: l1_user_instr hits=0035191479 misses=0000013657 l1_user_data hits=0009562889 misses=0001215170 我想编写一个脚本,为特定配置提供hits=xx和miss=yy grep l1_user_instr_hits | sed ? 我不是sed方面的专家,因此我提出了这个问题 也许awk适合您的需要。试试这个: awk '/l1_user_i

我有一行,其中有一些参数,我想抓住。最好的方法是什么

示例行是:

l1_user_instr hits=0035191479 misses=0000013657
l1_user_data hits=0009562889 misses=0001215170
我想编写一个脚本,为特定配置提供
hits=xx
miss=yy

grep l1_user_instr_hits | sed ?

我不是sed方面的专家,因此我提出了这个问题

也许
awk
适合您的需要。试试这个:

awk '/l1_user_instr/ { print $2,$3 }' file.txt
结果:

hits=0035191479 misses=0000013657

HTH

也许
awk
适合您的需要。试试这个:

awk '/l1_user_instr/ { print $2,$3 }' file.txt
结果:

hits=0035191479 misses=0000013657
HTH

使用
sed
(如果我正确获得了您想要的内容):

基本上,它将搜索匹配的
l1\u user\u instr
行,并在该行上创建两个组以匹配所需的数据,然后以新行分隔打印它们,然后退出。
awk
解决方案类似:

awk '/l1_user_instr/ {printf("%s\n%s\n",$2,$3) ; exit}' INPUTFILE
使用
sed
(如果我正确获得了您想要的内容):

基本上,它将搜索匹配的
l1\u user\u instr
行,并在该行上创建两个组以匹配所需的数据,然后以新行分隔打印它们,然后退出。
awk
解决方案类似:

awk '/l1_user_instr/ {printf("%s\n%s\n",$2,$3) ; exit}' INPUTFILE

现在还不完全清楚你在寻找什么,但从其他答案中的评论来看,我认为你想要的是获得点击数或未命中数的能力,而不是别的。例如,在查找配置“l1_用户_数据”的点击时,您希望输出准确:

0009562889

一件简单的事情(您可以添加一个更好的界面)是:

awk -v f=3 -v c=l1_user_instr -F ' *|=' '$0 ~ c {print $f}' input

通过将FS设置为在
=
和空白处拆分行,我们将命中数设为字段3,未命中数设为字段5。将变量c设置为要匹配的字符串,并将f设置为要显示的字段(3或5)。请注意,您可能希望处理FS中的制表符和空格(可以/应该做很多事情来改进此界面,但对于一次性操作,这很好)。

您不完全清楚要查找什么,但从其他答案中的评论来看,我认为你想要的是获得点击次数或未命中次数的能力,而不是别的。例如,在查找配置“l1_用户_数据”的点击时,您希望输出准确:

0009562889

一件简单的事情(您可以添加一个更好的界面)是:

awk -v f=3 -v c=l1_user_instr -F ' *|=' '$0 ~ c {print $f}' input

通过将FS设置为在
=
和空白处拆分行,我们将命中数设为字段3,未命中数设为字段5。将变量c设置为要匹配的字符串,并将f设置为要显示的字段(3或5)。请注意,您可能希望处理FS中的制表符和空格(可以/应该做很多事情来改进此界面,但对于一次性操作,这很好)。

我希望这里的数字是xx(hits=xx)。awk不能给我这个权利?请添加示例输出。不清楚你在找什么。cheers.example输出是一个bash变量,它包含每行的点击和未点击次数(配置)。我想在这里输入数字xx(hits=xx)。awk不能给我这个权利?请添加示例输出。不清楚你在找什么。cheers.example输出是一个bash变量,它包含每一行(config).sed的命中和未命中/=/'total | grep l1_user_instr。此命令仅将第一个“=”更改为“=”,而不是第二个=。任何原因??您需要添加
全局
功能。尝试:
sed's/=/=/g'
这是因为新字符串“=”包含旧字符串“=”,即递归。请您解释一下全局关键字
sed
背后的推理将在模式匹配的每次出现时进行替换。sed's/=/'total | grep l1_user_instr。此命令仅将第一个“=”更改为“=”,而不是第二个=。任何原因??您需要添加
全局
功能。尝试:
sed's/=/=/g'
是否因为新字符串“=”包含旧字符串“=”,即递归,请您解释一下全局关键字
sed
背后的推理将在模式匹配的每次出现时进行替换。