1

我需要获取字符串中两个单词或文本段之间的文本。

我已经用 sed 搜索并尝试了 EVERTYHING,但无法让它工作:S

我有一个像“aaa bbb ccc ddd eee”这样的字符串,我想提取 bbb 和 ddd 之间的文本。

4

3 回答 3

5

假设bbb在您感兴趣的文本和反向约束之后没有发生ddd,您可以这样做:

 sed 's/^.*bbb //; s/ddd.*$//' <<< "aaa bbb ccc ddd eee" 

输出:

ccc

sed可能不是最好的工具,也许你可以解释一下你想要做什么?例如,您可能希望使用积极的后视和前瞻:

grep -oP '(?<=bbb ).*?(?=ddd)' <<< "aaa bbb ccc ddd eee" 

输出:

ccc

编辑

根据评论,OP 想要从中提取 IP 地址checkip.dyndns.org。一种通用且更便携的方法是使用grep -o,例如:

curl -s http://checkip.dyndns.org/ | grep -oE '([0-9]+.){3}[0-9]+'
于 2013-04-10T15:49:13.797 回答
1

您可以使用 sed 分组。三对括号表示三个分组。输出端的\2是第二组的内容

sed 's/\(^.*bbb\)\(.*\)\(ddd.*$\)/\2/'
于 2013-04-10T16:05:06.987 回答
0

假设您不希望 bbb 和 ddd 之间的输出文本周围有空格

sed 's|^\(.*bbb *\)\(.*\)\( *ddd.*\)$|\2|g'

于 2013-04-11T09:24:41.930 回答