テキストファイルがあり、それに続く各行から文字列を抽出したいと思います。"OS="
input file line
A0A0A9PBI3_ARUDO Uncharacterized protein OS=Arundo donax OX=35708 PE=4 SV=1
K3Y356_SETIT ATP-dependent DNA helicase OS=Setaria italica OX=4555 PE=3 SV=1
希望の出力
OS=Arundo donax
OS=Setaria italica
または
Arundo donax
Setaria italica
ベストアンサー1
拡張正規表現grep
(または互換バージョン)でGNUを使用する:
grep -Eo "OS=\w+ \w+" file
またはデフォルトの正規表現(エスケープする必要があります)+
grep -o "OS=\w\+ \w\+" file
# or
grep -o "OS=\w* \w*" file
OS=
からまでのすべてを得るには、可能であればPerl互換正規表現(PCRE)(オプション)をOX=
使用して事前に確認してください。grep
-P
grep -Po "OS=.*(?=OX=)" file
#to also leave out "OS="
#use lookbehind
grep -Po "(?<=OS=).*(?=OX=)" file
#or Keep-out \K
grep -Po "OS=\K.*(?=OX=)" file
またはgrep
包含を使用OX=
して後で削除しますsed
。
grep -o "OS=.*\( OX=\)" file | sed 's/ OX=$//'
出力:
OS=Arundo donax
OS=Setaria italica