regex - sed 记住的模式输出没有返回我期望的任何东西
问题描述
我有以下字符串:
"date" : dateFunc("2019-12-01T00:00:00Z")
当我尝试使用 sed 获取任何反向引用时,我没有得到我认为应该得到的东西。
例如,如果我egrep -o使用相同的正则表达式,则显示如下:
$ echo '"date" : dateFunc("2019-12-01T00:00:00Z")' | egrep -o '(" : )'
" :
$ echo '"date" : dateFunc("2019-12-01T00:00:00Z")' | egrep -o '(" : )(dateFunc)'
" : dateFunc
$ echo '"date" : dateFunc("2019-12-01T00:00:00Z")' | egrep -o '(" : )(dateFunc)([(])'
" : dateFunc(
现在,如果我在 sed 中应用相同的正则表达式,我预计会出现以下情况:
为了\1
生产" :
为了\2
生产dateFunc
为了\3
生产(
但是,我得到的是以下内容:
$ echo '"date" : dateFunc("2019-12-01T00:00:00Z")' | sed -r 's/(" : )(dateFunc)([(])/\1/g'
"date" : "2019-12-01T00:00:00Z")
$ echo '"date" : dateFunc("2019-12-01T00:00:00Z")' | sed -r 's/(" : )(dateFunc)([(])/\2/g'
"datedateFunc"2019-12-01T00:00:00Z")
$ echo '"date" : dateFunc("2019-12-01T00:00:00Z")' | sed -r 's/(" : )(dateFunc)([(])/\3/g'
"date("2019-12-01T00:00:00Z")
解决方案
这是匹配的:
"date" : dateFunc("2019-12-01T00:00:00Z")
1: ~~~~
2: ~~~~~~~~
3: ~
这就是替换的工作方式(我用 替换了空格_
,剩余的空格只是为了显示对齐方式):
"date" : dateFunc("2019-12-01T00:00:00Z")
~~~~~~~~~~~~~
1: "date"_:_ "2019-12-01T00:00:00Z")
2: "date dateFunc "2019-12-01T00:00:00Z")
3: "date ("2019-12-01T00:00:00Z")
因此, sed 正在返回您要求它返回的内容。
sed仅替换匹配的部分,同时grep -o
显示它们。也许你想要
sed -r 's/.*(" : )(dateFunc)([(]).*/\1/g'
~~ ~~
^ ^
| |
Match anything Match anything
before after
推荐阅读
- apache-camel - Camel SFTP 文件传输,提高性能
- javascript - 通过Javascript将xlsx文件上传到c# API
- javascript - 将 blob 从 JS 保存到 Oracle SQL?
- can-bus - 产生错误帧时,与 Trasmit Error Count 有何关系?
- java - Java处理一个数组多线程
- postgresql - PostgreSQL default_statistics_target 没有改进行估计
- go - 如何减小图像尺寸和尺寸
- python - 有没有办法让用户在 django 管理的模型中只查看与他相关的对象?
- php - 带有 php 的引导卡中的图像轮播
- javascript - 立即解决 for 循环中的 async-await 承诺