这个问题在这里已经有了答案:
sed replace content within double quotes
(3 个回答)
1年前关闭。
我正在尝试使用正则表达式来查找和替换使用 sed
的 xml 文件中的两个双引号括起来的内容。 ,例如,"contents like this..."
.
特别是,我想替换 autoLogoffTime
的任何内容带有固定字符串 "2:15,AM"
在 xml 文件中。
我的 XML 文件的一些内容
<SystemSettings executionSummaryExportDir="/home/Jts/" autoLogoffTime="11:45,PM" repetitiveSnapshotDelay="500" snapshotCostReminderLimit="10" snapshotExcessiveUsageLimit="50" autoExportDirectory="/home/$
在不同的目录中有一些这些 XML 文件我想替换字符串。 autoLogoffTime
的内容可以有或没有空格,例如:autoLogoffTime="11:45,PM"
autoLogoffTime="11:45, PM"
我尝试使用 *
查找所有字符(空白和非空白)但它似乎不是正确的正则表达式。sed -i.bak 's/autoLogoffTime="*"/autoLogoffTime="2:15,AM"/g' file.xml
有人可以帮忙吗?
最佳答案
首先,修改 XML 文件的最佳方法是使用特定于 XML 的工具。 sed
仅当这些工具不可用时才应使用。因此,仅当有充分理由无法将它们安装在您的系统上时,才使用此答案。
在 shell glob 中,"*"
表示两个双引号,它们之间有任何字符。sed
但是,它不使用 glob,它使用正则表达式。在正则表达式中,*
表示前一个字符的零个或多个。因此,"*"
匹配零个或多个 "
后跟 "
.
尝试:
sed -i.bak 's/autoLogoffTime="[^"]*"/autoLogoffTime="2:15,AM"/g' file.xml
"[^"]*"
匹配 "
,后跟零个或多个任意字符,"
除外,后跟 "
.
关于ubuntu - 使用正则表达式查找两个双引号之间的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63421191/