開始文字列区切り文字と終了文字区切り文字の間のすべてのテキストを取得します。

開始文字列区切り文字と終了文字区切り文字の間のすべてのテキストを取得します。

Linuxでファイルを解析したいです。基本的にこのようなパターンが出るたびに[protein=proteinA]維持したいproteinA。つまり、次の9文字の間のすべての文字を維持したいと思います。

 [protein=

そしてキャラクター:

]

ファイルのすべてのパターンに対してこれを行いたいと思います。結果は次のとおりです。

proteinA
proteinB
proteinC
proteinD

Linuxでこれを達成するための簡単なコマンドは何ですか?

答え1

簡単なsed解決策は

 sed 's/\[protein=\(.*\)]/\1/'

入力のすべての行が同じように見える場合は、上記のコマンドが正しく機能しています。他の種類のデータがあり、上記で得られた結果が気に入らない場合は、目的の結果を指定する必要があります。[protein=something]

答え2

テキストを含めることができるラベルの一般的な回避策は、次のsedコマンドを使用することです。

sed -i.bak 's/\[[^=]*=\([^]]*\)]/\1/g' <file to process>

[tagname=something]このコマンドは、およびで機能し、タグ名では[tagname=なく]何でも構いませんprotein

-i.bakファイルを処理し、元のファイルを.bak拡張子とともにファイル名に追加します。

答え3

grep希望のデータを直接出力できます。

$ grep -oP '\[protein=\K((?!]).)+(?=])' file

関連情報