使用 Bash 从 XML 文件中删除文本

问题描述

我有一个生成 xml 文件 (drivers_list.xml) 的 bash 脚本,随后必须删除这一行:

xmlns="http://Feed.elasticstats.com/schema/nascar/series-v2.0.xsd"

通过浏览此页面,我找到了一些建议并尝试了,

sed -i '' "s/xmlns=\"http://Feed.elasticstats.com/schema/nascar/series-v2.0.xsd\"//g" drivers_list.xml

不幸的是,当我运行它时,出现以下错误

sed: 1: "s/xmlns="http://Feed.el ...": bad flag in substitute command: 'f'

我该如何解决这个问题?

解决方法

您必须转义所有斜线 (/) 并使用两种类型的引号 (',"):

sed -i 's/xmlns=\"http:\/\/feed.elasticstats.com\/schema\/nascar\/series-v2.0.xsd\"//g' drivers_list.xml

那么输出应该是预期的。
当然,使用这种方法,您不会发现 xmlns='...' 定义 - 它们同样有效。

,

找到它 -- Delimiters in sed substitution

Sed can use any character as a delimiter. 
In fact,it will automatically use the character following the `s` as a delimiter.