私はgrepを使ってファイルを解析していますが、画面の出力には次の改行文字が含まれています。
$ grep 'gene' sequence.gb
gene 89..1483
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
gene complement(1987..2763)
/gene="nucleocapsid protein"
/gene="nucleocapsid protein"
変数に割り当て、改行を使用して印刷できます。
$ gene=$(grep 'gene' sequence.gb)
echo "$gene"
gene 89..1483
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
gene complement(1987..2763)
/gene="nucleocapsid protein"
/gene="nucleocapsid protein"
ただし、これには実際の改行文字は含まれません。 '..'を含む行を再検索すると、すべて取得できるためです。
$ echo "$gene" | grep '..'
gene 89..1483
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
gene complement(1987..2763)
/gene="nucleocapsid protein"
/gene="nucleocapsid protein"
これは、引用符のない単一の文字列であることがわかります。
$ echo $gene
gene 89..1483 /gene="non-structural protein" /gene="non-structural protein" /gene="non-structural protein" /gene="non-structural protein" /gene="non-structural protein" /gene="non-structural protein" /gene="non-structural protein" gene complement(1987..2763) /gene="nucleocapsid protein" /gene="nucleocapsid protein"
私の質問は、改行形式をどのように維持または導入できるかということです。
ありがとう
答え1
.
これは正規表現のワイルドカードなので、2grep '..'
つ以上の文字を含むすべての行と一致します。
$ echo "$gene" | grep '..'
gene 89..1483
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
gene complement(1987..2763)
/gene="nucleocapsid protein"
/gene="nucleocapsid protein"
正規表現では.
本当に言えないことです。文字や数字だけでなく、句読点、スペース、タブ、その他すべての文字と一致します。
ピリオドのみを一致させるには、以下を使用します-F
。
$ echo "$gene" | grep -F '..'
gene 89..1483
gene complement(1987..2763)
-F
パターンを正規表現ではなく固定文字列として扱うように--fixed-strings
指示する略語です。grep
または、ピリオドだけが一致するようにピリオドをエスケープできます(ヒント:ギャップ):
$ echo "$gene" | grep '\.\.'
gene 89..1483
gene complement(1987..2763)
grep
または、ピリオドを文字クラスに入れて、ピリオドを文字通りのピリオドとして扱うように強制することもできます(ヒント:デイブ・トンプソン):
$ echo "$gene" | grep '[.][.]'
gene 89..1483
gene complement(1987..2763)
ただし、正規表現が必要ない場合は、正規表現を使用するとプロセスが速くなります-F
。grep