如何使用 sed 替换同一行中的两个 pattern 之间的字段

2019-09-30 06:01:18 +08:00
 ioioioioioi

需要把 aaa-bbb-ccc 中的 bbb 匹配出来再替换,用 /aaa/(.*)/-ccc/ 这种格式会把 aaa-和-ccc 一起匹配进去,最后还得再后面的替换部分把 aaa-和-ccc 写上,如果这两个部分很长就会写的很难看,请问有什么办法只替换指定一段不要和匹配字段一起替换掉.谢谢

4203 次点击
所在节点    Linux
12 条回复
dodorz
2019-09-30 07:55:08 +08:00
/aaa/(.*?)/-ccc/
xinhangliu
2019-09-30 08:03:56 +08:00
aaa-\zsbbb\ze-ccc
xinhangliu
2019-09-30 08:05:00 +08:00
抱歉看成 vim 了
pagxir
2019-09-30 08:13:28 +08:00
可以用后向引用吧
lovestudykid
2019-09-30 08:20:48 +08:00
好像没啥办法,不过你可以把前后匹配上,然后用\1 \2 来引用
lovestudykid
2019-09-30 08:21:36 +08:00
@pagxir 试了一下,好像并不可以(?:)(?<=)
hanminghui
2019-09-30 08:27:55 +08:00
没记错的话,可以用\(aaa\)...\(ccc\)按 part 匹配,替换那里用\1...\2 这种
wweir
2019-09-30 08:31:44 +08:00
sed 's/(aaa)-bbb(-ccc)/\1-ddd\2/'
citrix
2019-09-30 18:42:27 +08:00
用 perl -pie 替换 sed -i 吧,然后就可以用零宽断言了
ps1aniuge
2019-10-01 00:00:36 +08:00
说实话,我没看懂要找 [什么] ,替换成 [神马]

ps 找算替.ps1 ,即 powershell 版的 sed。是一个查找替换工具软件。

1 找、算、替、是啥意思?
1.1 找
1.2 算
即你可以自己编写函数,用来处理找到的结果,函数运行完毕后,产生要 [替] 的字符串。
1.3 替

区分大小写! 不支持正则!

《 ps 找算替 v3 》 下载地址:
https://pan.baidu.com/s/1yuqUOhY9lEw65vJ-vceg4w

win,linux 通用。
《 ps 找算替 v3 》使用手册:
下载地址中,有个《 ps 找算替_v3_readme.html 》
yrand
2019-10-02 16:03:24 +08:00
用 awk 简单点
savage455
2019-10-05 15:30:24 +08:00
echo "aaa-bbb-ccc" |sed 's/-[^_].*-/-ANYTHING_YOU_WANT-/'

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/605538

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX