我有这个正则表达式,我想与sed一起使用。我想使用sed,因为我想批量处理几千个文件,而我的编辑器不喜欢那样
找: "some_string":"ab[\s\S\n]+"other_string_
代替: "some_string":"removed text"other_string_
查找基本上匹配some_string和other_string之间的所有内容,包括特殊字符,如; ;;-或_并用警告已删除文本的方式替换它。
我当时正在考虑将字符类[[:space:]]
和组合在一起[[:alnum:]]
,但没有用。
在MacOS FreeBSD中sed
,您可以使用
sed -i '' -e '1h;2,$H;$!d;g' -e 's/"some_string":"ab.*"other_string_/"some_string":"removed text"other_string_/g' file
该1h;2,$H;$!d;g
部分将整个文件读入内存,以便所有换行符都暴露于正则表达式,然后"some_string":"ab.*"other_string_
匹配"some_string":"ab
直到最后一次出现的"other_string_
文本,并用RHS文本替换。
您需要-i ''
与FreeBSD一起使用sed
以强制执行内联文件修改。
顺便说一句,如果您决定使用perl
,则可以真正使用该-0777
选项来启用带有s
修饰符的文件细化(使.
匹配所有字符,包括换行符),并使用类似
perl -i -0777 's/"some_string":"\Kab.*(?="other_string_)/removed text/gs' file
这里,
"some_string":"
-匹配文字\K
-省略了与当前匹配存储缓冲区相距甚远的文本ab
- 火柴 ab
.*
-尽可能多的零个或多个字符.*?
-任何零个或多个字符的少地(?="other_string_)
-正向前瞻(与文本匹配,但不附加到匹配值),确保"other_string_
立即在右边。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句