Perl 단일 행 명령을 통해 특정 행의 개행 문자를 제거하고 싶습니다.
입력하다:
1407233497,1407233514,bar
1407233498,1407233515,foo
mingstats&fmt=n
1407233499,1407233516,foobar
예상 출력:
1407233497,1407233514,bar
1407233498,1407233515,foomingstats&fmt=n
1407233499,1407233516,foobar
나는 지금까지 무엇을 시도했는가?
이 정규식은 \n(?!\d+,\d+)
제거하려는 개행 문자와 정확히 일치합니다. 하지만 Perl 한 줄 명령을 통해 이를 달성하는 방법을 모르겠습니다. 나는 노력했다.
perl -pe 's/\n(?!\d+,\d+)//g' file
그러나 파일의 모든 줄 바꿈을 제거하고 다음 줄을 한 줄로 인쇄하게 됩니다.
1407233497,1407233514,bar1407233498,1407233515,foomingstats&fmt=n1407233499,1407233516,foobar
Perl 한 줄 명령이 위의 정규식을 사용했다면 기쁠 것입니다...
답변1
노력하다:
$ perl -00pe 's/\n(?!\d+,\d+)//g' file
1407233497,1407233514,bar
1407233498,1407233515,foomingstats&fmt=n
1407233499,1407233516,foobar
perl
기본적으로 옵션을 사용하여 파일을 한 줄씩 읽으므로 -p
정규 표현식이 작동하지 않습니다.
-00
옵션은 단락 소리 흡수 모드를 활성화하고 이제 정규 표현식이 여러 줄에서 작동합니다.
perldoc perlrun에서:
-0[8진수/16진수]
입력 레코드 구분 기호($/ )를 8진수 또는 16진수로 지정합니다. 숫자가 없으면 널 문자가 구분 기호입니다. 다른 스위치는 번호 앞이나 뒤에 위치할 수 있습니다. 예를 들어, null로 끝나는 파일 이름을 인쇄하는 find 버전이 있는 경우입니다.
...
특수 값 00은 Perl이 단락 모드에서 파일을 읽도록 합니다. 0400 이상의 값은 Perl이 전체 파일을 읽게 하지만 일반적으로 이 목적으로 0777 값이 사용됩니다.
답변2
perl -pe 'print "\n" if $c and !/^(?!\d+,\d+)/; $c=chomp; END{print "\n" if $c}' file_name