如果其中有关键字
,我想替换:
之间的所有内容
具有
TEXT =“/东西/样的:/如何/可酮替换/文本/分离/带/结肠/在于-包括/ A /的关键字 ?:有/可 - 是/多个/的关键字:/感谢:/的关键字“
使用:
sed -e 's/regex here that searches for keyword/\/some\/path/g' <<< $TEXT
获得:
/东西/样的:/一些/路径:/一些/路径:/感谢:/一些/路径
P.S。
另一个让它更清晰的例子:如何将包含hello
的路径替换为另一条路径?
/opt/hello/bin:/bin:/home/user/hello:/home/user/bin:/media/hello
=>
/some/path:/bin:/some/path:/home/user/bin:/some/path
我对不明确的问题道歉。
答案 0 :(得分:3)
我认为你需要这个,
$ 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
,打印所有记录。
答案 1 :(得分:1)
我的版本:
sed 's/:/::/g;s/^/:/;s/$/:/;s/:[^:]*keyword[^:]*:/:REPLACEMENT:/g;s/^://;s/:$//;s/::/:/g'
答案 2 :(得分:1)
使用bash
IFS=: read -ra arr <<<'/opt/hello/bin:/bin:/home/user/hello:/home/user/bin:/media/hello'
v=$(IFS=:; printf "%s\n" "${arr[*]/*hello*/\/some\/path}")
echo $v
/some/path:/bin:/some/path:/home/user/bin:/some/path