linux - sed 命令删除找到的匹配项

标签 linux bash unix awk sed

我有一个如下所示的文件“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/

相关文章:

c - unix 中的高级编程示例 ls(1) 命令错误

python - 登录系统时运行 Python 脚本? [xubuntu 15.04]

bash - 没有传递参数时如何读取标准输入?

linux - 运行查找命令并通过电子邮件发送结果

sockets - unix 域套接字 - 保护接收器

linux - 获取从 find 命令到变量的路径

c - 使用 ld 手动链接 SDL/openGL 应用程序

linux - GIT - 下载最新的 tar.bz2

linux - 像 gedit 这样的文本编辑器可以通过 fish 访问/编辑远程文件吗?

java - 将输出重定向到滚动文件