提取字符串同一行中两个分隔符之间的多个匹配项

提取字符串同一行中两个分隔符之间的多个匹配项

这很棘手......输入在多行中每行多次出现。存在许多“id=”行,但我只想要以 ai-c “id=”开头的行

输入示例(两行长线):

d-fl ai-c" id="3af3a73f26a63a-list-" lima zulu bravo hotel d-fl ai-c" id="7ab8273f273e7273f82c2-list-" alpha id="8372364fa2361ab1-list-" hotel foxtrox mike d-fl ai-c" id="973a72b72c72df12a2-list-" uniform hotel

十一月第二线高尔夫开始 d-fl ai-c" id="83hd826ab712cc71-list-" bravo mike mike d-fl ai-c" id="7612364bab72a-list-" 高尔夫麦克风

期望的输出是:

id="3af3a73f26a63a"

id="7ab8273f273e7273f82c2"

id="973a72b72c72df12a2"

id="83hd826ab712cc71"

id="7612364bab72a"

我见过的所有脚本示例似乎只适用于一行中的第一次出现。

答案1

一种方法是:

grep -oP '\hai-c"\h\Kid="[^-]*'  input.file | sed -e 's/$/"/'

我们使用打开的功能以及GNU grep仅输出匹配项的选项,而不是在找到匹配项时输出默认的整行。Perl-o

输出:

id="3af3a73f26a63a"
id="7ab8273f273e7273f82c2"
id="973a72b72c72df12a2"
id="83hd826ab712cc71"
id="7612364bab72a"

答案2

其他方式:

sed ' s/d-fl ai-c" /\n/g; s/-/"\n/g; :L; /^id=/ P; D; bL; ' file
id="3af3a73f26a63a"
id="7ab8273f273e7273f82c2"
id="973a72b72c72df12a2"
id="83hd826ab712cc71"
id="7612364bab72a"

相关内容