如何修改sed命令移除文件行中除function行外的括号
解决sed移除括号但保留function后括号的问题
我明白你的需求——要删掉每行里的大部分括号,但得保留function后面跟着的括号内容,比如(A1.A2)这种。原来的sed 's/[()]//g' file会把所有括号都干掉,确实不符合要求,这里给你一个实用的修改方案:
方法:先保护目标括号,再删除其余括号
用这条sed命令就能实现需求:
sed -E 's/(function )(\([^)]+\))/\1\2/g; s/[()]//g' your_file.txt
命令细节解释:
- 第一部分替换规则
s/(function )(\([^)]+\))/\1\2/g:- 我们用正则分组精准捕获
function(注意后面的空格)和它紧接着的完整括号内容(\([^)]+\))——其中[^)]+会匹配到下一个右括号为止,确保只捕获一对完整的括号结构。 - 替换时把这两部分原封不动放回,相当于给
function (...)这部分“套了保护罩”,后续操作不会修改它。
- 我们用正则分组精准捕获
- 第二部分替换规则
s/[()]//g:此时剩下的都是不需要保留的零散括号,直接全部删除即可。
效果演示:
输入行:
cell (ABC) (A1) (A2) function (A1.A2)
执行命令后输出:
cell ABC A1 A2 function (A1.A2)
这个方案还能兼容一行里有多个function (...)的场景,比如cell (X) function (Y) function (Z),处理后会保留所有function后的括号。
内容的提问来源于stack exchange,提问作者VIKAS CHOUDHARY




