gpt4 book ai didi

regex - bash 替换用包含关键字的标记分隔的部分文本

转载 作者:行者123 更新时间:2023-11-29 09:43:45 34 4
gpt4 key购买 nike

如果其中有关键字,我想替换 : 之间的所有内容

拥有

TEXT="/Something/like-this:/How/can-one-replace/text/separated/with/colon/that-includes/a/keyword?:There/may-be/multiple/keywords:/Thanks:/keyword"

与:

sed -e 's/regex here that searches for keyword/\/some\/path/g' <<< $TEXT

得到:

/Something/like-this:/some/path:/some/path:/Thanks:/some/path

附言
另一个更清楚的例子:如何将包含 hello 的路径替换为另一条路径?

/opt/hello/bin:/bin:/home/user/hello:/home/user/bin:/media/hello 
=>
/some/path:/bin:/some/path:/home/user/bin:/some/path

对于不清楚的问题,我深表歉意。

最佳答案

我想你需要这个,

$ sed -r 's~^([^:]+):.*:([^:]+):(.*)$~\1:/Replacement:/Replacement:\2:/Replacement~g' file
/Something/like-this:/Replacement:/Replacement:/Thanks:/Replacement

或者类似这样的东西,

$ sed -r 's~^([^:]+):.*:([^:]+):(.*)$~\1:/*Replacement*:/*Replacement*:\2:/*Replacement*~g' file
/Something/like-this:/*Replacement*:/*Replacement*:/Thanks:/*Replacement*

或者

可能是这样的,如果给Replacement变量赋一些路径,

$ Replacement=/foo/bar
$ sed -r "s~^([^:]+):.*:([^:]+):(.*)$~\1:/*$Replacement*:/*$Replacement*:\2:/*$Replacement*~g" file
/Something/like-this:/*/foo/bar*:/*/foo/bar*:/Thanks:/*/foo/bar*

或者

你也可以试试这个,

awk -v RS=: -v var=/path -v ORS=: '{sub (/.*hello.*/,var)}1' file

示例:

$ echo '/opt/hello/bin:/bin:/home/user/hello:/home/user/bin:/media/hello' | awk -v RS=: -v var=/foo/bar -v ORS=: '{sub (/.*hello.*/,var)}1'
/foo/bar:/bin:/foo/bar:/home/user/bin:/foo/bar:

解释:

  • Awk 内置变量 RS(记录分隔符)和 ORS(输出记录分隔符)设置为 : .所以 awk 会在找到 : 时断开字符串在输入中处理 : 之后的文本将在下一行。

  • ORS设置为 : , 所以 awk 打印带有 : 的记录作为分隔符。

  • -v var=/foo/bar , 替换字符串分配给变量 var .

  • sub (/.*hello.*/,var) ,如果记录与此正则表达式匹配,它将用变量 var 中的值替换整个记录.

  • 1 , 打印所有记录。

关于regex - bash 替换用包含关键字的标记分隔的部分文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23847130/

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