>我有以下字符串:
"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