文字列内の 2 つの単語またはテキスト セグメントの間のテキストを取得する必要があります。
sedでEVERTYHINGを検索して試しましたが、動作しません:S
「aaa bbb ccc ddd eee」のような文字列があり、bbb と ddd の間のテキストを抽出したいと考えています。
文字列内の 2 つの単語またはテキスト セグメントの間のテキストを取得する必要があります。
sedでEVERTYHINGを検索して試しましたが、動作しません:S
「aaa bbb ccc ddd eee」のような文字列があり、bbb と ddd の間のテキストを抽出したいと考えています。
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]+'
bbb と ddd の間の出力テキストの周りにスペースを入れたくない場合
sed 's|^\(.*bbb *\)\(.*\)\( *ddd.*\)$|\2|g'