用于删除匹配的sed命令

Fir*_*300 0 unix linux bash awk sed

我有一个文件"fruit.xml",如下所示:

FRUIT="Apples"
FRUIT="Bananas"
FRUIT="Peaches"
Run Code Online (Sandbox Code Playgroud)

我想使用单个SED行命令来查找所有出现的内容,NAME="并且我想要""从找到的所有匹配项之间去掉值.

所以结果应该是这样的:

Apples
Bananas
Peaches
Run Code Online (Sandbox Code Playgroud)

这是我使用的命令:

sed 's/.*FRUIT="//' fruit.xml
Run Code Online (Sandbox Code Playgroud)

问题是它"在我需要的值的末尾留下了最后一个.例如:Apples".

fed*_*qui 5

只需抓住该组并将其打印回来:捕获所有内容,"直到"发现另一个()(或者\(...\)如果您不使用该-r选项).然后,打印回来\1:

$ sed -r 's/.*FRUIT="([^"]*)"/\1/' file
Apples
Bananas
Peaches
Run Code Online (Sandbox Code Playgroud)

您还可以使用字段分隔符awk:告诉awk您的字段分隔符是FRUIT="或者".这样,期望的内容成为第二个字段.

$ awk -FS='FRUIT="|"' '{print $2}' file
Apples
Bananas
Peaches
Run Code Online (Sandbox Code Playgroud)

要使命令正常工作,只需删除"行尾:

$ sed -e 's/.*FRUIT="//' -e 's/"$//' file
      ^^                 ^^^^^^^^^^^
      |                  replace " in the end of line with nothing
      -e to  allow you use multiple commands
Run Code Online (Sandbox Code Playgroud)