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
背后的推理将在模式匹配的每次出现时进行替换。