ubuntu - 使用正则表达式查找两个双引号之间的内容

标签 ubuntu sed

这个问题在这里已经有了答案:





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/

相关文章:

ubuntu - 无法在 ubuntu docker 容器上使用 systemd

linux - 如何录制从扬声器发出的声音(而不是进入麦克风的声音)?

xml - 使用sed在xml文件中查找和替换

python - 空白的多行自动递增编号

mongodb - 尝试通过 npm 安装 mongodb 并收到 EINVAL 错误

Bash if 或语句,找不到命令

linux - 使用 sed 将 grep 的结果添加到文件的第二行

awk - 在模式匹配后插入一行,如果只有字符串不存在

bash - 用不同文件中的列替换文件中的列,同时保留格式

javascript - 从本地文件系统提供的 Webworker 不工作