^L(\f/FF/form-feed/page-break) 문자 제거

^L(\f/FF/form-feed/page-break) 문자 제거

^L유닉스 파일에서 문자와 그 뒤에 오는 빈 줄을 제거하는 방법은 무엇입니까 ? 다음을 시도했는데 VT와 공백을 제거할 수 있지만 ^L 문자와 그 뒤의 빈 줄은 제거할 수 없습니다.

tr -s '\040\011\' '|' <$x>> modified.txt

그리고:

tr -d '\013'  <modified1.txt>> $FILENAME

답변1

이것은탈자 부호~을 위한양식 공급. GNU 구현을 통해 sed8진수 값을 사용하여 이를 제거할 수 있습니다 \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텍스트 형식 나누기를 나타냅니다.

관련 정보