在unix中的两个字符串之间获取文本

时间:2013-04-10 15:44:59

标签: sed

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

我搜索并尝试使用sed进行EVERTYHING,并且无法使其工作:S

我有一个像“aaa bbb ccc ddd eee”这样的字符串,我想在两者之间提取文字,比方说,bbb和ddd。

3 个答案:

答案 0 :(得分:4)

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

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

输出:

ccc

sed可能不是最好的工具,也许你可以解释一下你想做什么?例如,您可能希望使用正面lookbehind和lookahead:

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

输出:

ccc

修改

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

curl -s http://checkip.dyndns.org/ | grep -oE '([0-9]+.){3}[0-9]+'

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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