gpt4 book ai didi

regex - 使用正则表达式和 sed 替换文件中的字符串

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:14 24 4
gpt4 key购买 nike

在文本文件中包含以下字符串。

{"_job":"delete","query":{"query":{"bool":{"must":[{"term":{"_id":"28381"}}],"should":[]}}},"script":{"inline":"ctx._source.meta='This is a ' test string Peedr'"},"timestamp":1518165383,"host":"","port":"9200","index":"","docType":"","customIndexer":""}

我想将 ctx._source.meta='' 部分中的所有 ' 替换为 \' 使用 sed

在上面的示例中,我将 This is a ' test string Peedr 转换为 This is a\' test string Peedr,因此所需的输出将是:

{"_job":"delete","query":{"query":{"bool":{"must":[{"term":{"_id":"28381"}}],"should":[]}}},"script":{"inline":"ctx._source.meta='This is a \' test string Peedr'"},"timestamp":1518165383,"host":"","port":"9200","index":"","docType":"","customIndexer":""}

我正在使用以下正则表达式获取 ctx._source.meta 字符串(第 3 个捕获组)内的 '

(meta=')(.*?)(')(.*?)(')

我有正则表达式,但我不知道如何使用 sed 命令\' 替换第三个捕获组.

有人可以帮我告诉我必须使用的 sed 命令吗?

提前致谢

最佳答案

sed 通常不支持 Perl 正则表达式扩展,因此非贪婪的 .*? 可能不会如您所愿。如果您想使用 Perl 正则表达式,请使用 Perl!

perl -pe "s/(meta='.*?)(')(.*?')/\$1\\\\\$2\$3/"

如果输入格式不正确,这仍然不一定有效;更好的方法是专门从匹配中排除单引号,这样就不需要非贪婪匹配。

sed "s/\\(meta='[^']*\\)'\\([^']*'\\)/\\1\\\\'\\2/"

在这两种情况下,转义 shell 双引号内的反斜杠所需的反斜杠数量是惊人的。

关于regex - 使用正则表达式和 sed 替换文件中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48861976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com