Linux

列印文本文件中預定義標籤之間的部分行

  • June 7, 2021

我有一個如下文件

<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 '/&lt;s&gt;/, /&lt;\/s&gt;/' trsTest.txt

但它會列印整行。

如何列印標籤之間的內容?

有了awk它可能是:

$ awk -v FS="&lt;/?g&gt;" '{print $2}' trsTest.txt
Good wheatear
The farm land is to be sold
knock knock

或者,如果您想保留標籤:

$ awk -v FS="&lt;/g&gt; " '{print $1 FS}' trsTest.txt
&lt;g&gt; Good wheatear &lt;/g&gt;
&lt;g&gt; The farm land is to be sold &lt;/g&gt;
&lt;g&gt; knock knock &lt;/g&gt;

您可以簡單地使用 GNU grep 並僅列印行的匹配部分 ( -o):

grep -o '&lt;g&gt;.*&lt;\/g&gt;' trsTest.txt

模式需要在單引號之間,以防止 shell 擴展字元(如*

第一個命令將產生:

&lt;g&gt; Good wheatear &lt;/g&gt;
&lt;g&gt; The farm land is to be sold &lt;/g&gt;
&lt;g&gt; knock knock &lt;/g&gt;

如果您不希望包含標籤,那麼您可以這樣做:

sed 's/.*&lt;g&gt;\(.*\)&lt;\/g&gt;.*/\1/' trsTest.txt

它的工作方式如下:

  • 匹配所有內容,包括開始&lt;g&gt;標籤
  • \(我記得上面使用和之間的東西\)
  • 將結束標記之後的任何內容匹配&lt;\g&gt;到行尾
  • 然後用記住的內容替換\1

第二個命令將產生:

Good wheatear
The farm land is to be sold
knock knock

引用自:https://unix.stackexchange.com/questions/652968