我有一个分析的输出,我想grep一个关键字“X” - 它总是出现 - 每次出现短语“Y”。关键字“X”出现多次,但我想只获得“Y”之后的后续内容。
例如,我希望每次Iter = 10时都会得到后续的文件夹名称,即F1,F4。
Iter = 10
Folder = F1
Iter = 5
Folder = F2
Iter = 6
Folder = F3
Iter = 10
Folder = F4
有什么想法吗?
文件的Hexdump -c输出(由@Inian请求):
0000000 I t e r = 1 0 \n F o l d
0000010 e r = F 1 \n \n I t e r
0000020 = 5 \n F o l d e r = F 2 \n
0000030 \n I t e r = 6 \n F o l d
0000040 e r = F 3 \n \n I t e r
0000050 = 1 0 \n F o l d e r = F 4
0000060 \n
0000061
答案 0 :(得分:3)
您可以使用//Return true if the user by url is blocked, false otherwise
function isblocked(blocked_id) {
var blocked_users = [];//The list of blocked users
chrome.storage.sync.get(['blocked_users'], function(data){
blocked_users = data.blocked_users;
});
console.log("U" + blocked_users + "U");
//Goes through blocked users
for(var current_blocked of blocked_users) {
console.log("B"+current_blocked+"B");
if(current_blocked == blocked_id) return true;//If the user is blocked
}
console.log(blocked_users+"QQ");
return false;
}
来满足此要求。它适用于输入文件每一行的基于awk
的规则。所以在我们的例子中,我们首先匹配字符串/pattern/{action}
并启用一个标志,以便在以Iter = 10
开头的字符串的下一个匹配时,我们提取最后一个空间限制列,其在{{1由Folder
表示,我们重置后续匹配的标志。
awk
或没有$NF
尝试
awk '/\<Iter = 10\>/{flag=1; next} flag && /^Folder/{print $NF; flag=0;}' file
答案 1 :(得分:1)
你也可以grep
:
$ grep -A 1 Iter.*10 file | grep Folder | grep -o "[^ ]*$"
F1
F4
说明:
grep -A 1 Iter.*10 file
搜索所需的模式并获取一些尾随上下文(-A 1
,只有一行)grep Folder
下次搜索关键字Folder
grep -o "[^ ]*$"
获取上一个输出的最后一部分如果Iter
和Folder
行之间存在噪音,您可以先将grep "\(Iter.*10\|Folder\)" file
删除。
以上预计Iter
行会出现在Folder
行之前。如果不是这样,awk就是治愈方法。例如,数据(行顺序不同,有噪音):
Folder = F1
Foo = bar
Iter = 10
Iter = 5
Foo = bar
Folder = F2
$ awk -v RS="" -F"\n" ' # record separated by empty line
/Iter/ && / 10$/ { # look for record with Iter 10
for(i=1;i<=NF;i++) # iterate all fields (lines within record)
if(split($i,a," *") && a[1]=="Folder") # split Folder line to components
print a[3] # output value
}
' file
F1
答案 2 :(得分:0)
grep
只是regrex搜索。
对于更复杂的操作,您可以使用awk
。
E.g。
awk '/Iter = 10/ { getline; print $0 }' /path/to/file
其中/ path / to / file是包含要搜索的文本的文件
编辑: 在发布我的答案后,我读了Inian的答案,它更加精细和准确。