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".
只需抓住该组并将其打印回来:捕获所有内容,"直到"发现另一个()(或者\(...\)如果您不使用该-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)