[英]Match Multiple Strings In Awk Command Using RS And RT
我有以下數據:
Example line 0</span>
<tag>Example line 1</tag>
<span>Example line 1.5</span>
--Hello Example line 1.7
<tag>
Example line 2
</tag>
--Hello Example line 2.7
<span>Example line 4</span>
使用此命令awk -v RS='</tag>' 'RT {gsub(/.*?<tag>|\\n/, ""); print "<tag>" $0 RT}'
awk -v RS='</tag>' 'RT {gsub(/.*?<tag>|\\n/, ""); print "<tag>" $0 RT}'
我得到:
<tag>Example line 1</tag>
<tag>Example line 2</tag>
但是,我希望輸出為:
<tag>Example line 1</tag>
--Hello Example line 1.7
<tag>Example line 2</tag>
--Hello Example line 2.7
題:
我只想知道如何添加“或”選項以匹配以--Hello
開頭的任何行。 在我的代碼中實現的正確方法是什么?
其他選項:
或者,另一種選擇是使用grep -o '<tag.*tag>\\|^--.*'
但我還需要找到一種匹配換行符的方法(如此處要求: Linux字符串之間的任何匹配) Grep命令 )。
非常感謝您的幫助。
您可以將之前的awk命令修改為:
awk -v RS='</tag>' '/\n--Hello /{print gensub(/.*\n(--Hello [^\n]*).*/, "\\1", "1")}
RT{gsub(/.*<tag>|\n/, ""); print "<tag>" $0 RT}' file
<tag>Example line 1</tag>
--Hello Example line 1.7
<tag>Example line 2</tag>
--Hello Example line 2.7
$ cat tst.awk
BEGIN { RS="--Hello[^\\n]+|<\\/tag>" }
RT { print (RT~/^--/ ? "" : gensub(/.*(<tag>)/,"\\1",1)) RT }
$ awk -f tst.awk file
<tag>Example line 1</tag>
--Hello Example line 1.7
<tag>
Example line 2
</tag>
--Hello Example line 2.7
上面的代碼將GNU awk用於多字符RS,RT和gensub()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.