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

Linux下使用SED提取句子中两个指定单词间内容的方法求助

Linux环境提取两个指定单词间内容的解决方法

原命令失效原因

你之前使用的sed -e 's/Hello\(.*\)doing/\1/'仅匹配替换了字符串中Hello到doing的片段,doing之后的内容未进入匹配范围会原样输出,因此会残留多余的today?内容。

可用解决方案

方案1:调整SED命令

匹配整行内容,将行首到Hello、doing到行尾的内容全部纳入匹配规则,仅保留中间捕获的内容:

sed -e 's/.*Hello\(.*\)doing.*/\1/'

测试效果:

echo "Hello world, how are you doing today?" | sed -e 's/.*Hello\(.*\)doing.*/\1/'
# 输出: world, how are you 

如果存在单个行内有多个doing的场景,需要提取第一个Hello和第一个doing之间的内容,可以使用GNU sed的扩展正则写法:

sed -r 's/.*Hello([^[:space:]]*.*?)doing.*/\1/'

方案2:使用GNU GREP命令(更简洁)

利用Perl正则的前后向断言直接提取目标内容:

grep -oP '(?<=Hello).*(?=doing)'

方案3:使用AWK实现(兼容性更好)

以Hello和doing作为分隔符,直接提取第二个字段即为目标内容:

awk -F 'Hello|doing' '{print $2}'

内容的提问来源于stack exchange,提问作者Ivan Kanchev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:57:04