You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用sed提取左括号前的单词(支持括号前有无空格)

解决sed提取括号前单词(支持括号前有无空格)的问题

你的问题在于原表达式里的 \(.*\)强制要求单词和(之间不能有空格——当两者之间存在空格时,.*会把空格也包含进捕获范围,导致无法匹配到(,最终捕获组为空。

要同时兼容单词与左括号之间有空格/无空格的情况,你可以调整正则规则,让括号前的空格变为可选,同时精准锁定目标单词:

sed 's/.* \([^ ]*\) *(.*)/\1/'

表达式逻辑拆解:

  • .* :匹配到最后一个空格之前的所有内容(比如void fun ()里的void )
  • \([^ ]*\):捕获不含空格的连续字符序列(也就是我们要提取的单词,比如fun),用[^ ]*确保不会把单词后面的空格误包含进来
  • *:匹配0个或多个空格(这是实现“有无空格都兼容”的核心)
  • (.*:匹配左括号及后面的所有内容

测试验证:

  1. 单词与括号无空格的场景:
echo "void fun()" | sed 's/.* \([^ ]*\) *(.*)/\1/'

输出:fun

  1. 单词与括号有空格的场景:
echo "void fun ()" | sed 's/.* \([^ ]*\) *(.*)/\1/'

输出:fun

  1. 单词前后有多个空格的场景:
echo "void   fun   ()" | sed 's/.* \([^ ]*\) *(.*)/\1/'

输出:fun

如果你的sed版本支持扩展正则(比如GNU sed),还可以用更简洁的写法(加-E参数省去转义符):

sed -E 's/.* ([^ ]*) *(.*)/\1/'

内容的提问来源于stack exchange,提问作者Equation Solver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:27:57