我有一个文件" fruit.xml"看起来如下所示:
FRUIT="Apples"
FRUIT="Bananas"
FRUIT="Peaches"
我想使用单个SED行命令查找NAME="
的所有匹配项,并且我希望从找到的所有匹配项中删除""
之间的值。
所以结果应该是这样的:
Apples
Bananas
Peaches
这是我正在使用的命令:
sed 's/.*FRUIT="//' fruit.xml
问题是它将最后"
留在我需要的值的末尾。例如:Apples"
。
答案 0 :(得分:5)
抓住小组并将其打印回来:抓住"
的所有内容,直到"
找到另一个()
(如果您不使用\(...\)
,则抓住-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
:
{{1}}
答案 1 :(得分:1)
如果你想保留前导空格,那就足够了
sed 's/\bFRUIT="\([^"]*\)"/\1/' fruit.xml
OR
sed 's/\bFRUIT="\|"//g' fruit.xml
答案 2 :(得分:0)
试试这个,这将用引号中的已建立的水果替换该行:
sed 's/.*FRUIT="\(.*\)"/\1/' test.xml
答案 3 :(得分:0)
使用简单的cut
命令
cut -d '"' -f2 fruits.xml
输出:
Apples
Bananas
Peaches
答案 4 :(得分:0)
假设每个值出现1次且格式为
sed 's/.*="//;s/".*$//' fruit.xml