这很棘手......输入在多行中每行多次出现。存在许多“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"