Linux
列印文本文件中預定義標籤之間的部分行
我有一個如下文件
<g> Good wheatear </g> other parts of line <g> The farm land is to be sold </g> other parts of line <g> knock knock </g> other parts of line
我希望我的輸出是這樣的:
<g> Good wheatear </g> <g> The farm land is to be sold </g> <g> knock knock </g>
即列印 <g> 和 </g> 標籤之間的內容,包括標籤
我試過這個命令:
awk '/<s>/, /<\/s>/' trsTest.txt
但它會列印整行。
如何列印標籤之間的內容?
有了
awk
它可能是:$ awk -v FS="</?g>" '{print $2}' trsTest.txt Good wheatear The farm land is to be sold knock knock
或者,如果您想保留標籤:
$ awk -v FS="</g> " '{print $1 FS}' trsTest.txt <g> Good wheatear </g> <g> The farm land is to be sold </g> <g> knock knock </g>
您可以簡單地使用 GNU grep 並僅列印行的匹配部分 (
-o
):grep -o '<g>.*<\/g>' trsTest.txt
模式需要在單引號之間,以防止 shell 擴展字元(如
*
)第一個命令將產生:
<g> Good wheatear </g> <g> The farm land is to be sold </g> <g> knock knock </g>
如果您不希望包含標籤,那麼您可以這樣做:
sed 's/.*<g>\(.*\)<\/g>.*/\1/' trsTest.txt
它的工作方式如下:
- 匹配所有內容,包括開始
<g>
標籤\(
我記得上面使用和之間的東西\)
- 將結束標記之後的任何內容匹配
<\g>
到行尾- 然後用記住的內容替換
\1
第二個命令將產生:
Good wheatear The farm land is to be sold knock knock