sed两个字符串之间的模式匹配只显示第一个匹配
我想使用两个字符串之间的sed模式匹配来解析一个文件并找到第一个匹配,使用第一个匹配,我试图在循环中执行一些操作迭代,两个字符串之间的sed的模式匹配打印所有的比赛,我只希望率先拿到赛:sed两个字符串之间的模式匹配只显示第一个匹配
文件:
},{
"prefix" : "AD",
"prefix" : "CQ",
"last" : 0,
"last" : 0,
"month" : 0,
"month" : 5,
"today": 0,
"today": 0,
"yesterday": 2,
"yesterday": 0,
"agents": 0
},{
"prefix" : "CS",
"prefix" : "AE",
"last" : 1,
"last" : 0,
"month" : 130,
"month" : 0,
"today": 0,
"today": 20,
"yesterday": 0,
"yesterday": 38,
"agents": 0
},{
"prefix" : "AF",
"prefix" : "CZ",
"last" : 0,
"last" : 0,
"month" : 6,
我想前缀与代理商之间提取,但只有前使用下面的sed命令进行匹配:
sed -n '/prefix/,/agents/p' /var/saas/stats/usage_1499245200.json.2 >> /var/saas/stats/try
有没有一种方法,我只能从第一次迭代usage_1499245200.json.2
文件中提取第一个匹配并执行循环。
感谢, Sriram.V
您可以添加一个命令时遇到agents
退出:
sed -n -e '/prefix/,/agents/p' -e '/agents/q'
结果:
"prefix" : "AD",
"prefix" : "CQ",
"last" : 0,
"last" : 0,
"month" : 0,
"month" : 5,
"today": 0,
"today": 0,
"yesterday": 2,
"yesterday": 0,
"agents": 0
非常感谢,每次我读这个文件,我在一个循环下执行一组动作,在执行这些动作后,我在基于相同模式匹配的基础上再次删除行,当我尝试使用时:sed - n -e'/ prefix /,/ agents/d'-e'/ agents/q'/var/saas/stats/usage_1499245200.json.2,由于-n,这会抑制输出,我怎样才能删除就地而不删除连续匹配并只删除第一个,我应该使用-i吗? – sriram2207
'-i'只覆盖当前文件。但这看起来像一个全新的问题。我建议你问另一个问题(这不是问题,你甚至可以把它链接到那个问题) –
使用awk
:
[[email protected] test]$ awk '/prefix/{found=1}found;/agents/{exit}' infile
"prefix" : "AD",
"prefix" : "CQ",
"last" : 0,
"last" : 0,
"month" : 0,
"month" : 5,
"today": 0,
"today": 0,
"yesterday": 2,
"yesterday": 0,
"agents": 0
输入
[[email protected] test]$ cat infile
},{
"prefix" : "AD",
"prefix" : "CQ",
"last" : 0,
"last" : 0,
"month" : 0,
"month" : 5,
"today": 0,
"today": 0,
"yesterday": 2,
"yesterday": 0,
"agents": 0
},{
"prefix" : "CS",
"prefix" : "AE",
"last" : 1,
"last" : 0,
"month" : 130,
"month" : 0,
"today": 0,
"today": 20,
"yesterday": 0,
"yesterday": 38,
"agents": 0
},{
"prefix" : "AF",
"prefix" : "CZ",
"last" : 0,
"last" : 0,
"month" : 6,
thta是等效的awk版本,awk在标签中,所以很好的答案。 –
非常感谢,每次我阅读这个文件,我在一个循环下执行一组动作,在执行这些动作后,我基于相同的模式匹配再次删除行,当我尝试使用时:sed - n -e'/ prefix /,/ agents/d'-e'/ agents/q'/var/saas/stats/usage_1499245200.json.2,由于-n,这会抑制输出,我怎样才能删除就地而不删除连续匹配并只删除第一个,我应该使用-i吗? – sriram2207
@ sriram2207,如果你有'gawk',那么你可以使用'gawk -i inplace -v INPLACE_SUFFIX = .bak',否则'awk'{}'infile> tmpfile && mv tmpfile infile' –
应该是什么最后的结果(包括循环)? – RomanPerekhrest
为什么python再次标签?这与python无关。这甚至是有效的JSON,以及密钥是重复的。 –