grepを使用して改行文字を明示的に表示する

grepを使用して改行文字を明示的に表示する

人間が読める方法(行末文字を表示する方法などgrep)でファイルに改行を表示する方法はありますか?vim$:set list

.正規表現でdot()がどのように機能するかを説明しようとしています。最初の説明では、grep --color=auto '.' HBB.fna(画像)のように点だけで構成されたパターンを検索します。この--colorオプションを使用すると、ファイル内の各文字が一致する色で出力に表示されます。しかし、行末文字を明示的に表示することで、いいえマッチ。私が言うこと以来、grep私はそれ以外のものを使用したくありません。

サンプル出力は添付ファイルにあります。繰り返しますが、私が望むのは、行末文字が一致する色ではなく、各行の終わりに表示されることです。

どんな助けでも大変感謝します。

ここに画像の説明を入力してください。

答え1

私は以下を使用してcat -A印刷物を後処理grepすることを検討しました。$

ただし、少なくともGNU coreutilscatにはcat -E行末のみが表示されるため、たとえば、次のような結果が表示されます。

$ printf 'foo\nbar\n' | grep --color=always . | cat -E
foo$
bar$

ロゴは$着色されていません。

または、Perlを使用して手動でこれを実行すると、改行文字は次のように置き換えられます<NL>

$ printf 'foo\nbar\n' | grep --color=always . | perl -pe 's/\n/<NL>/'; echo
foo<NL>bar<NL>

繰り返しますが、この<NL>部分は着色されていません。

を使用すると、少なくともNUL区切りモードでは、grep -z改行文字が実際に一致したことを示すために色が割り当てられます。.

同じ色:

ここに画像の説明を入力してください。

grep .上記のように、GNU grepは各個々の文字の前後、つまり一致する各インスタンスの開始と終了で色が変化するエスケープ文字を印刷します。たとえば、より長いシーケンスをgrep '..*'一度に一致させ、より少ないエスケープ文字を取得する変更できます。

答え2

画像の代わりに使用されたテキストを公開すると、誰もが簡単になります。皆さんに役立つように、次の記事を参照してください(一部のインターネットにあります)。

$ cat HBB.fna
>NM_000518.5 Homo sapiens hemoglobin subunit beta (HBB), mRNA
ACATTTGCTTCTGACACAACTGTGTTCACTAGCAACCTCAAACAGACACCATGGTGCATCTGACTCCTGA
GGAGAAGTCTGCCGTTACTGCCCTGTGGGGCAAGGTGAACGTGGATGAAGTTGGTGGTGAGGCCCTGGGC
AGGCTGCTGGTGGTCTACCCTTGGACCCAGAGGTTCTTTGAGTCCTTTGGGGATCTGTCCACTCCTGATG
CTGTTATGGGCAACCCTAAGGTGAAGGCTCATGGCAAGAAAGTGCTCGGTGCCTTTAGTGATGGCCTGGC
TCACCTGGACAACCTCAAGGGCACCTTTGCCACACTGAGTGAGCTGCACTGTGACAAGCTGCACGTGGAT
CCTGAGAACTTCAGGCTCCTGGGCAACGTGCTGGTCTGTGTGCTGGCCCATCACTTTGGCAAAGAATTCA
CCCCACCAGTGCAGGCTGCCTATCAGAAAGTGGTGGCTGGTGTGGCTAATGCCCTGGCCCACAAGTATCA
CTAAGCTCGCTTTCTTGCTGTCCAATTTCTATTAAAGGTTCCTTTGTTCCCTAAGTCCAACTACTAAACT
GGGGGATATTATGAAGGGCCTTGAGCATCTGGATTCTGCCTAATAAAAAACATTTATTTTCATTGCAA

したがって、あなたの質問は次のとおりです。

正規表現でドット(.)がどのように機能するかを説明しようとしています。

dotgrepで改行文字を()と.一致させる簡単な方法はありません。これは私たちが見た内容から暗示されます。

ここに画像の説明を入力してください。

一致する文字は3点の倍数(69)でなければならず、点と一致しない文字は1つだけ残ります。これが、ほとんどの行に無彩色の最後の文字がある理由です。

しかし、71点を使用しても(71は少数なので、他のどんな数字もそれを合わせることはできません)。これは、1行に表示される70文字と末尾の改行文字です。

ここに画像の説明を入力してください。

. dot改行文字は一致できないためです。各行が処理される前に削除され、行が処理された後に再接続されます。いずれにせよ、一致する改行文字はありません。

非標準-zオプション(フルテキスト入力を1つの連続ブロックとして処理し、改行文字が一致するテキストに残ることを許可)を使用しても、改行文字はanまたはspaceatabまたは一部などの印刷されない文字になります。 other whitespace、端末を印刷できません。 ここに画像の説明を入力してください。

したがって、改行文字(一致するかどうかにかかわらず出力に存在する)を目に見えるもの(viまたは同様のエンコードを=使用)に変換し、行が連続(非フォーマット化)に折りたたまれないように改行を追加する必要があります。 )文字ストリーム。または、他の同様のエディタを使用すると、これを簡単に実行できます。$sed -n lsed -z 's/\n/=\n'ここに画像の説明を入力してください。

したがって、デフォルトのpcreではもちろん、grepでも改行文字をdot()と一致させる方法はありません。.ただし、grep出力をスマートに編集して、改行文字を表示して表示できます。

あなたの要件が解決されることを願っています。

関連情報