Bash
如何提取文件中兩個n之間的字元串
我有一個帶有模式的文件
<span class="WebRupee">Rs.</span>\n29\n<br/><font style="font-size:smaller;font-weight:normal">\n3 days\n</font></td>, <td class="pricecell"><span class="WebRupee">Rs.</span>\n59\n<br/><font style="font-size:smaller;font-weight:normal">\n7 days\n</font></td>, <td class="pricecell"><span class="WebRupee">Rs.</span>\n99\n<br/><font style="font-size:smaller;font-weight:normal">\n12 days\n</font></td>
我想要值 29、3 天、59 等。
基本上之間的值
\n value \n
我諮詢了很多地方,但我不知道如何轉義 \n 字元。
我試過了:-
grep -o '\n.*\n' o.txt
但它沒有用
Grep 解釋
\n
為換行符。看起來您的文件沒有換行符,它\
後面跟著n
. 要搜尋文字反斜杠,您必須將它們加倍:$ grep -o '\\n[^\\]*\\n' o.txt \n29\n \n3 days\n \n59\n \n7 days\n \n99\n \n12 days\n
使用 GNU grep,可以輕鬆清理輸出以刪除
\n
:$ grep -oP '(?<=\\n)[^\\<>]*(?=\\n)' o.txt 29 3 days 59 7 days 99 12 days
這裡,
(?<=\\n)
是一個後視斷言,(?=\\n)
是一個前瞻斷言,要求我們匹配的文本用\n
. 雖然 grep 返回不重疊的匹配,但這裡的一個微妙之處在於,後瞻和前瞻不計入匹配。這給我們留下了一個問題,我們不想要的文本也被\n
. 例如,在 o.txt 中,字元由 .\n<br/><font style="font-size:smaller;font-weight:normal">\n
包圍\n
。為了消除這些字元串,我們要求匹配的文本不僅要排除,\
還要排除<
and>
。如果我們沒有 GNU grep,另一種選擇是用於
sed
清理輸出:$ grep -o '\\n[^\\]*\\n' o.txt | sed 's/\\n//g' 29 3 days 59 7 days 99 12 days
另一種選擇是使用 awk:
$ awk '0==NR%2' RS='\\\\n' o.txt 29 3 days 59 7 days 99 12 days
在這裡,awk 使用
\
後跟n
作為記錄分隔符,我們只列印偶數記錄。