我有一个如下所示的文件“fruit.xml”:
FRUIT="Apples"
FRUIT="Bananas"
FRUIT="Peaches"
我想使用单个 SED 行命令查找所有出现的 NAME="
并且我想从找到的所有匹配项中删除 ""
之间的值。
所以结果应该是这样的:
Apples
Bananas
Peaches
这是我正在使用的命令:
sed 's/.*FRUIT="//' fruit.xml
问题是它在我需要的值的末尾留下了最后一个 "
。例如:Apples"
。
最佳答案
只需捕获该组并将其打印回来:捕获从 "
到另一个 "
的所有内容,并使用 ()
(或 \(...\)
如果您不使用 -r
选项)。然后,用 \1
打印回来:
$ sed -r 's/.*FRUIT="([^"]*)"/\1/' file
Apples
Bananas
Peaches
您还可以在 awk
中使用字段分隔符:告诉 awk
您的字段分隔符是 FRUIT="
或 "
。这样,所需的内容就变成了第二个字段。
$ awk -FS='FRUIT="|"' '{print $2}' file
Apples
Bananas
Peaches
要使您的命令起作用,只需去掉行尾的 "
:
$ sed -e 's/.*FRUIT="//' -e 's/"$//' file
^^ ^^^^^^^^^^^
| replace " in the end of line with nothing
-e to allow you use multiple commands
关于linux - sed 命令删除找到的匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27861678/