특정 문자 수를 초과하는 텍스트 파일에서 줄을 삭제하는 방법은 무엇입니까?
예: 이 텍스트 파일에서:
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'