输入数据如下:
I/o live/o in/o New/B-geo-loc约克/I-geo-loc
i/o live/o某处/o in/o space/o
I/O would/O love/O to/O live/O in france/B-geo-loc(I/O would/O love/O至法国现场/O)
这个/o是/o我的/o家/o
旧金山/B-geo-loc CA/I-geo-loc is/o a/o great/o place/o to/o live/o
目的是提取以“/B-geo-loc
”或“/I-geo-loc
”结尾的所有单词,并在找不到匹配的地方留下一个空行
尝试在grep中使用以下正则表达式,但未获得所需的输出
grep -o '\w*/B-geo-loc\b \w*/I-geo-loc\b' sourcefile.txt > targetfile.txt
这是我的regex输出:
新/B-geo-loc约克/I-geo-loc
旧金山/B-GEO-loc CA/I-GEO-loc
而不是这个期望的输出:
新/B-GEO-loc约克/I-GEO-loc
---空行---
法国/B-geo-loc
---空行---
旧金山/B-GEO-loc CA/I-GEO-loc
谢谢。
最佳答案
$ awk '{c=0; for (i=1;i<=NF;i++) if ($i ~ /\/[BI]-geo-loc$/) printf "%s%s", (c++ ? OFS : ""), $i; print ""}' file
New/B-geo-loc York/I-geo-loc
France/B-geo-loc
Sanfrancisco/B-geo-loc CA/I-geo-loc
关于regex - Bash-grep提取以指定字符串结尾的单词;在找不到匹配项的地方留空白,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39552695/