【发布时间】:2021-03-21 19:01:07
【问题描述】:
我有一个文件,类似这样的
|| SUMMERCAMP ||
| Martin Mayer |
| Hunter David |
| Vanessa Lawrence |
| Jake Corper |
| Claudia Jones |
|| Discoparty ||
| Pavel Chavetzny |
| Julian Tannenbaum |
| Cord Kruger |
| Jennifer Lowenstein |
我现在想要匹配,假设是 Claudia Jones,我想要结果 ||夏令营 || (我不需要管道)。我只需要匹配一行并从那里向上搜索,直到我匹配到例如||,然后打印该行。如果匹配 Cord Kruger,我需要 ||不和谐 ||结果(同样有或没有管道)。试过sed,没有用。非常感谢所有帮助。
我尝试过使用
awk -F \| '/^\|{2}/ { grp=$1;next } $1=="$groupmember" { print "||"grp"||" }' $GROUPSRC
例如(根据 Raman 所说),其中 $GROUPSRC 是我正在搜索的文件,$groupmember 是我在 while 读取循环中提供给脚本的变量。
我也试过
grep -B 10
但这不起作用,因为接下来的 10 行会向上看,有时我没有“||”在那些,或者我有不止一个,这当然会扰乱结果。
感谢到目前为止的回答,很抱歉没有提出更明确的问题。
【问题讨论】:
-
你能展示你的尝试吗?
-
另一种方式,利用
ed在文件中向后搜索的能力:printf "%s\n" '/User 4/;?GROUP?;.p' | ed -s yourfile(搜索匹配User 4的第一行,然后从该行向后搜索匹配GROUP,并打印该行。) -
重新表述问题以使其更清楚,并包括我尝试过的示例,我们可以重新打开它吗?