^L
유닉스 파일에서 문자와 그 뒤에 오는 빈 줄을 제거하는 방법은 무엇입니까 ? 다음을 시도했는데 VT와 공백을 제거할 수 있지만 ^L 문자와 그 뒤의 빈 줄은 제거할 수 없습니다.
tr -s '\040\011\' '|' <$x>> modified.txt
그리고:
tr -d '\013' <modified1.txt>> $FILENAME
답변1
이것은탈자 부호~을 위한양식 공급. GNU 구현을 통해 sed
8진수 값을 사용하여 이를 제거할 수 있습니다 \o14
.
sed 's/\o14//g' file
이스케이프 코드를 사용할 수도 있습니다.
sed 's/\f//g' file
CtrlV이러한 문자는 해당 문자에 대한 코드를 눌러 터미널에 입력할 수 있습니다. 이 경우에는 CtrlL. 따라서 다음을 입력하십시오.
sed 's/
그런 다음 CtrlV다음을 클릭하세요 CtrlL.
sed 's/^L
이제 다음 명령을 완료하십시오.
sed 's/^L//g' file
위에서 직접 쓰거나 붙여넣지 말고 ^L
제가 제공하는 키보드 단축키를 사용하세요.
다음을 사용하여 삭제할 수도 있습니다 tr
.
tr -d '\f' < file
또는 perl
:
perl -pe 's/\f//g' file
해당 항목과 그 뒤의 빈 줄을 제거하려면 \f
다음을 수행하세요.
perl -0pe 's/\f\s*/\n/s' file
답변2
ksh93, bash, zsh, mksh, 최신 FreeBSD sh를 사용하세요.
sed $'/\f/,/./{/\f/d;/./!d;}'
연속적인 시퀀스가 있으면 \f\n\n...
실패합니다 .
GNU에서는 sed
생략할 수 있습니다 $
.
POSIXly( $'...'
아직 POSIX는 아니지만 SUSv5에 나타날 수 있음):
FF=$(printf '\f')
sed "/$FF/,/./{/$FF/d;/./!d;}"
;
현재 POSIX 사양에는 before 대신 개행 문자가 필요 }
하지만 실제로는POSIX 사양의 오류초기 구현에서도 sed
필요하지 않기 때문입니다.
답변3
sed "$(printf '$!N;/\f')"'\n/,/\n./!P;D' <in >out
...POSIX 호환 쉘이 있는 한 작동해야 printf
합니다 sed
.
printf
문자 그대로 문자를 삽입하는 경우에는 실제로 그럴 필요가 없습니다. 일반적으로 할 수 있습니다CTRL+V
그 다음에CTRL+L
.
그래서...
sed '$!N;/^L\n/,/\n./!P;D' <in >out
...안에^L
위의 순서는 다음을 수행하여 달성됩니다.CTRL+V
그 다음에CTRL+L
텍스트 형식 나누기를 나타냅니다.