string1とstring2の間のコンテンツを検索または特定する方法は?

string1とstring2の間のコンテンツを検索または特定する方法は?

時間の経過とともに変更される可能性がある長い文字列から値を抽出しようとしています。たとえば、文字列は次のようになります。

....../filename-1.9.0.3.tar.gz"<....

私が抽出したいのは間の値ですファイル名 -そして.tar.gz、デフォルトではファイルバージョン(この場合は1.9.0.3)です。これが必要なのは、後でコマンドを実行でき、値が1.9.0.6または2.0.0.2であるか、まったく異なる値になる可能性があるためです。

どうすればいいですか?現在はgrepだけを使用していますが、sed、awk、cutなどのような他のユーティリティを使用しても大丈夫です。完全に明確にするには、文字列のファイルバージョン部分を抽出するだけです。かなり長いので(両方とも)、他のすべての部分は何とか削除する必要があります。

ベストアンサー1

grep -P/の場合、pcregrep肯定的な振り返りと肯定的な予測を使用します。

grep -P -o '(?<=STRING1).*?(?=STRING2)' infile

あなたの場合は、次のものSTRING1と交換してください。filename-STRING2\.tar\.gz


アクセス権がない場合、またはサポートされていないpcregrep場合は、お気に入りのテキスト処理ツールを使用してこれを実行できます。以下は、同じ出力を提供する移植可能な方法です。grep-Ped

ed -s infile <<\IN
g/STRING1/s//\ 
&/g
v/STRING1.*STRING2/d
,s/STRING1//
,s/STRING2.*//
,p
IN

仕組み:各項目に改行文字を追加してSTRING1(今は各行は最大1回発生します)、STRING1.*STRING2残りは一致しない行をすべて削除し、間のSTRING1内容を保持してSTRING2結果を印刷します。

おすすめ記事