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

Posted

技术标签:

【中文标题】使用 Bash 从 XML 文件中删除文本【英文标题】:Remove Text from XML File using Bash 【发布时间】:2021-09-04 17:39:51 【问题描述】:

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

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 "s#original_string_without_she#new_string_without_she#/g" drivers_list.xml @VictorLee,谢谢!感谢帮助 欢迎使用 SO,同样的事情,你可以使用单引号 ' 而不是双引号 " 来包含 s/regexp/replacement/,所以你不需要转义" 在模式字符串中,因为在这种情况下,您的模式字符串不包含 '。我找不到英文链接的模式拆分字符,我只找到了一个中文链接(blog.chinaunix.net/uid-12072359-id-2960859.html),也许你可以通过翻译来理解。 【参考方案1】:

找到它——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.

【讨论】:

【参考方案2】:

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

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

那么输出应该和预期的一样。 当然,使用这种方法,您将无法捕捉到 xmlns='...' 定义——它们同样有效。

【讨论】:

You have to escape all slashes(/) 没有意义,你可以使用# / ,等其他模式分割字符,所以它不需要转义不等于模式分割字符的字符。

以上是关于使用 Bash 从 XML 文件中删除文本的主要内容,如果未能解决你的问题,请参考以下文章

如何从python中的文本文档中删除所有标点符号和其他符号?

用于从 domain.xml 文件中删除/删除值的 JBOSS CLI 命令

QT中怎样读取中文文本文件!

bash方法从csv文件中删除最后4列

如何从 git bash 屏幕中删除文件并从存储库中删除该文件? [复制]

通过 Bash 从文本文件中删除空行,包括空格字符 [重复]