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