1
wxf666 2022-11-03 23:32:50 +08:00
```shell
$ sed "s/dare/'&'/" <<<'howdareyou' how'dare'you ``` |
2
iamzuoxinyu 2022-11-04 00:10:16 +08:00
一个快但可能不正确的方法:给 how 和 you 改成 how' 和 'you
|
3
yuanmomo 2022-11-04 03:28:43 +08:00 via iPhone
@iamzuoxinyu 跟你想到一块儿了
|
4
dcsuibian 2022-11-04 03:54:06 +08:00
sed 的正则表达式引擎比较弱
建议用 awk ,有扩展的正则表达式引擎。 其中对应你这个问题就是 group 分组和引用功能 |
5
aijam 2022-11-04 07:50:06 +08:00 1
> echo howdareyou | sed -r "s/how(.+)you/how'\1'you/"
how'dare'you |
6
huntagain2008 2022-11-04 08:57:58 +08:00 1
#5 /how(.+)you/ 可能用的是“.“,跟用字母[a-zA-Z]匹配的结果完全不同 。当字符串很长,中间有一些干扰项,比如前面中间都有 how 、you ,结尾是 you ,中间明明是可以匹配好几个 how*****you 的,但是只匹配了第一个 how 和最后一个 you ,中间的各种 how****you 都没有打上引号,只给第一个 how 和最后一个 you 打了引号。
|
7
maosu OP |
8
huntagain2008 2022-11-04 09:22:53 +08:00
#2 how->how‘ you->‘you 这种还清楚点,小白我就是这样想的。
awk 有内置的 gsub 函数可以全局替换匹配项 # howxxxyou.awk # { value = $0 gsub(/how/, "&'", value) gsub(/you/, "'&", value) print value } |