텍스트 파일 수정

텍스트 파일 수정

특정 문자 수를 초과하는 텍스트 파일에서 줄을 삭제하는 방법은 무엇입니까?

예: 이 텍스트 파일에서:

         a;dskjshdkjhgsdlhb5451candsncas;ldjch;sdkjncl
         zdkcjsd#c
         adsaskad@#s;l35684ad;sjdikm;
         ;okjilh@j
         oieoigsb53454kdsjhcyavscjbkajlknscm;la,

문자와 문자가 8개만 포함된 모든 줄을 명령줄을 사용하여 자동으로 삭제하는 방법은 무엇입니까? 일종의 텍스트 파일이 있고 그 안에 8개(문자와 문자)가 포함된 줄만 삭제하고 싶기 때문에 이 질문을 드리는 것입니다(모든 파일 간에 유사한 줄이며 동일한 문자와 문자를 가집니다).

답변1

노력하다

awk 'length($0) == 8 ' old_file > new_file

- == 8 또는를 사용하여 != 8같음 또는 같지 않음을 나타냅니다.

답변2

grep -vEx '.{8}'

또는:

awk 'length != 8'

입력에 유효한 문자를 형성하지 않는 바이트 시퀀스가 ​​포함된 경우 잠재적인 문제에 유의하십시오(예: 잘못된 인코딩으로 파일을 처리할 때 일반적인 UTF-8 로케일의 0xe9 바이트).

GNU의 경우 awk이러한 바이트는 반환된 값에 추가되지 않습니다 length. GNU의 경우 grep이러한 바이트 시퀀스를 포함하는 행은 일치하지 않으므로 .{8}이 행은 (때문에 -v) 반환됩니다. 그렇지 않으면바이너리 파일(표준 입력) 일치정보. GNU를 사용할 때 비슷한 문제에 직면하게 됩니다 sed.

답변3

를 사용하여 임의의 문자를 일치시키고 sed정확히 8개와 일치하도록 지시하십시오. 줄의 시작 부분부터 일치한다는 뜻 , 줄 끝 부분까지 일치한다는 뜻, 줄을 삭제한다는 뜻입니다..\{8\}^$d

 sed '/^.\{8\}$/d' file > newfile

또는 기존 파일을 변경하려면 GNU를 사용하십시오 sed.

 sed -i '/^.\{8\}$/d' file 

빈 줄도 제거하려는 경우 -e동일한 명령에 여러 표현식을 넣을 수 있습니다.

sed -i -e '/^.\{8\}$/d' -e '/^$/d'

관련 정보