如何使用sed提取并复制字符串中hello与(之间的指定内容?
使用sed实现文本转换需求
要完成你需要的文本转换,核心是捕获hello和(之间的函数名,再用它生成重复的调用格式。可以用sed的捕获组来实现,具体命令如下:
命令示例(扩展正则写法)
sed -E 's/hello ([a-zA-Z_]+)\(.*\);/hello \1(x) \1(y)/' input.txt
命令说明
-E参数启用扩展正则表达式,避免对捕获组括号转义,写法更简洁- 正则匹配规则:
hello:匹配行首的固定前缀([a-zA-Z_]+):捕获函数名(支持大小写字母和下划线,可根据实际函数名规则调整)\(.*\);:匹配从(开始到末尾);的所有内容(也就是需要替换掉的部分)
- 替换规则:
\1引用之前捕获到的函数名,生成\1(x) \1(y)的格式,替换掉原来的函数调用部分
如果你的sed版本不支持-E,可以用基本正则写法(需要转义捕获组括号):
sed 's/hello \([a-zA-Z_]*\)(.*);/hello \1(x) \1(y)/' input.txt
效果验证
输入文本:
hello foo(ignore this); hello bar(or that); hello func(or anything really);
执行命令后输出:
hello foo(x) foo(y) hello bar(x) bar(y) hello func(x) func(y)
内容的提问来源于stack exchange,提问作者Lolo
相关产品推荐
相关产品推荐

