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