1

文字列内の 2 つの単語またはテキスト セグメントの間のテキストを取得する必要があります。

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 に答える
0

bbb と ddd の間の出力テキストの周りにスペースを入れたくない場合

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

于 2013-04-11T09:24:41.930 に答える