사람이 읽을 수 있는 방식(예: 줄 끝 문자를 표시하는 방식 grep
)으로 파일에 줄 바꿈을 표시하는 방법이 있습니까 ?vim
$
:set list
.
정규식에서 dot( )가 어떻게 작동하는지 설명하려고 합니다 . 초기 설명으로는 grep --color=auto '.' HBB.fna
(이미지) 와 같이 점만으로 구성된 패턴을 검색합니다 . 이 --color
옵션을 사용하면 파일의 각 문자가 일치하는 색상으로 출력에 나타납니다. 하지만 줄 끝 문자를 명시적으로 표시하여 해당 문자가아니요성냥. 내가 말하는 것 이후로 grep
나는 그것 이외의 것을 사용하고 싶지 않습니다.
샘플 출력은 첨부 파일에 있습니다. 다시 말하지만, 내가 원하는 것은 줄 끝 문자가 일치하는 색상이 아닌 각 줄의 끝에 나타나는 것입니다.
어떤 도움이라도 대단히 감사하겠습니다.
답변1
나는 다음을 사용하여 cat -A
인쇄물을 사후 grep
처리 하는 것을 고려했습니다.$
그러나 적어도 GNU coreutils cat
에는 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
따라서 귀하의 질문은 다음과 같습니다.
정규식에서 점(.)이 어떻게 작동하는지 설명하려고 합니다.
dot
grep에서 개행 문자를 ( )와 .
일치시키는 쉬운 방법은 없습니다 . 이는 우리가 본 내용에서 암시됩니다.
일치하는 문자는 점 3개의 배수(69)여야 하며 점과 일치하지 않는 문자는 1개만 남습니다. 이것이 바로 대부분의 줄에 무채색의 마지막 문자가 있는 이유입니다.
하지만 71점을 사용한다고 해도(71은 소수이므로 다른 어떤 숫자도 이를 맞출 수 없습니다). 이는 한 줄에 표시되는 70개 문자와 후행 개행 문자입니다.
.
dot
개행 문자는 일치할 수 없기 때문입니다 . 각 행이 처리되기 전에 제거되고 행이 처리된 후에 다시 연결됩니다. 어떤 경우에도 일치하는 개행 문자가 없습니다.
비표준 -z
옵션(전체 텍스트 입력을 하나의 연속 블록으로 처리하여 개행 문자가 일치하는 텍스트에 남아 있도록 허용)을 사용하더라도 개행 문자는 an space
또는 a tab
또는 일부 와 같이 인쇄되지 않는 문자가 됩니다. other whitespace
, 터미널 인쇄할 수 없습니다.
따라서 우리는 개행 문자(일치 여부, 그러나 출력에 존재함)를 눈에 보이는 것( vi 또는 유사한 인코딩을 =
사용 )으로 변환하고 행이 연속(형식화되지 않은)으로 접히지 않도록 추가 개행을 추가 해야 합니다. ) 문자 스트림. 또는 다른 유사한 편집기를 사용하면 이 작업을 쉽게 수행할 수 있습니다.$
sed -n l
sed -z 's/\n/=\n'
따라서 기본 pcre에서는 물론 grep에서도 개행 문자를 dot
( )와 일치시킬 수 있는 방법이 없습니다. .
그러나 grep 출력을 스마트하게 편집하여 개행 문자를 표시하고 표시할 수 있습니다.
귀하의 요구 사항이 해결되기를 바랍니다.