gpt4 book ai didi

regex - Bash - grep 提取以指定字符串结尾的单词;在找不到匹配项的地方留下空格

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:20 24 4
gpt4 key购买 nike

这是输入数据:

I/o live/o in/o New/B-geo-loc York/I-geo-loc
I/o live/o somewhere/o in/o space/o
I/o would/o love/o to/o live/o in France/B-geo-loc
This/o is/o my/o home/o
Sanfrancisco/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  

这是我的正则表达式输出:

New/B-geo-loc York/I-geo-loc
Sanfrancisco/B-geo-loc CA/I-geo-loc

而不是这个期望的输出:

New/B-geo-loc York/I-geo-loc
---blank line---
France/B-geo-loc
---blank line---
Sanfrancisco/B-geo-loc CA/I-geo-loc

谢谢。

最佳答案

如果 grep 不能满足您的要求,则没有真正的义务在这里使用它。下面是在原生 bash 中实现的(不是 POSIX sh——使用 #!/bin/bash shebang,而不是 #!/bin/sh 如果嵌入一个脚本):

while read -r -a words; do
matches=( )
for word in "${words[@]}"; do
[[ $word = */[IB]-geo-loc ]] && matches+=( "$word" )
done
printf '%s\n' "${matches[*]}"
done <sourcefile.txt >targetfile.txt

对于一个巨大的输入文件,可能值得使用 ksh93 或 awk 重写,它们中的任何一个都比 bash 具有更好的性能,但是如果您没有花费大量的人工时间坐在那里等待它运行,那就无关紧要了.

关于regex - Bash - grep 提取以指定字符串结尾的单词;在找不到匹配项的地方留下空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39552695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com