내 Ubuntu 컴퓨터에 파일이 있고 "@"을 사용하여 특정 줄의 시작 부분을 표시했습니다.
@A
bbb
@B
bbb
@D
ccc
위 파일이 되도록 "@"으로 시작하는 줄 끝에서 새 줄을 제거하고 싶습니다.
@Abbb
@Bbbb
@Dccc
sed를 사용하여 @로 시작하는 줄을 일치시킬 수 있습니다.
sed /^@/ ...
그러나 문자열 끝에 있는 개행 문자를 제거하는 방법을 찾으려고 노력 중입니다. sed
텍스트 편집기에서 파일을 수동으로 열고 직접 삭제할 필요 없이 이 작업을 쉽게 수행할 수 있는 방법이 있어야 합니다 .
답변1
$ printf '%s\n' 'g/^@/j' ',p' 'Q' | ed -s file
@Abbb
@Bbbb
@Dccc
위의 내용은 짧은 스크립트를 사용하여 ed
정규식과 일치하는 파일의 각 줄을 그 뒤의 줄과 ^@
연결합니다 . 그런 다음 편집 버퍼의 모든 행을 인쇄하고 저장하지 않고 종료합니다.
$ sed '/^@/ { N; s/\n//; }' file
@Abbb
@Bbbb
@Dccc
sed
현재 줄이 일치하면 이 명령은 다음 줄을 입력 버퍼에 추가합니다 ^@
. 삽입된 개행 문자가 제거되고 해당 행이 인쇄됩니다.
@
두 변형 모두 해당 줄이 바로 다음에 오면 해당 줄로 시작하는 줄을 놓칩니다. 이는 그들이 다음으로 향할 것임을 의미합니다.
@1
@2
X
@3
Y
입력하다
@1@2
X
@3Y
대신에
@1@2X
@3Y
이것이 괜찮은지 불분명합니다.
답변2
Perl이 구출하러 옵니다!
perl -pe 'chomp if /^@/' -- file
-p
입력된 내용을 한 줄씩 읽고 처리 후 각 줄을 인쇄합니다./^@/
@
줄의 시작 부분 과 일치합니다.- 씹다후행 줄 바꿈 제거
답변3
비 sed
모든 줄이 @와 @가 아닌 것을 번갈아 사용한다는 것을 알고 있다면,
paste -d '' - - < file
앗
awk '{printf "%s%s", $0, (/^@/ ? "" : ORS)}' file
답변4
그리고 perl
:
$ perl -pe 's/^(@.*)\n/\1/' file
@Abbb
@Bbbb
@Dccc
또는
$ perl -pe 's/\n// if /^@/' file
@Abbb
@Bbbb
@Dccc