sedを使用してテキストを抽出する方法

sedを使用してテキストを抽出する方法

テキストファイルがありますsed

たとえば、次の行では次のようになります。

string>![TEST[Extract this string]>/string>

欲しい

Extract this string 

これをどのように達成するのですかsed?基本的にstring>![TEST[「」という表現で始まり、「」]>/string>という表現で終わるテキストを取得したいと思います。

答え1

sed -e 's/string>!\[TEST\[\(.*\)]>\/string>/\1/' file

または

sed -e 's|string>!\[TEST\[\(.*\)]>/string>|\1|' file

出力:

この文字列を抽出してください

答え2

文字列に何を一致させるべきかを知らせるだけでなく、文字列に何を保持するべきかを教えてください。

sed -ne 's@string>!\[TEST\[\([^]]*\)\]>/string>@\1@gp'

sinコマンドは、sed正規表現と置換文字列の2つのパラメータを使用します。通常、/区切り文字は両方を区切るために使用されますが、この場合は任意の文字を使用できます@。正規表現には、 のような特殊文字があります[。実際の文字が必要な場合は、これらの文字を引用する必要があります(例:)。角かっこの間のすべての内容をキャプチャします。そして、文字列を正規表現に一致する文字列に置き換えます。最後に、sendは行()で複数の一致を実行し、置き換えられた行を印刷するように指示します(オプションを使用して行を印刷しないように指示した後)。]\string>!\[\([^]]*\)\1@gpgsed-n

答え3

Awkを使用する簡単な方法:

awk -F'[][]' '{print $3}' file

答え4

GNU経由でgrep

$ echo 'string>![TEST[Extract this string]>/string> foo bar string>![TEST[Extract this string]>/string>' | grep -oP 'string>!\[TEST\[\K.*?(?=]>/string>)'
Extract this string
Extract this string

関連情報