4자 미만의 줄을 조건부로 삭제

4자 미만의 줄을 조건부로 삭제

#줄이 또는 로 시작 하지 않는 한 4자 미만의 줄을 자르고 싶습니다 !.

입력 예:

aa
bbb
 
   
dasasdsad
! f
#
!
# s
a
&B@*!

산출:

dasasdsad
! f
#
!
# s
&B@*!

답변1

그리고 grep:

< file.in grep -E '^[#!]|.{4}' > file.out

#, 또는으로 시작 !하거나 일련의 4개 문자를 포함하는 행을 선택하십시오.

또는 다음을 사용하여 awk:

< file.in awk '/^[#!]/ || length >= 4' > file.out

또는 다음을 사용하여 sed:

< file.in sed -e '/^[#!]/b' -e '/.\{4\}/!d' > file.out

답변2

다음과 같은 것을 시도해 볼 수 있습니다. 코드는 테스트되지 않았습니다.

while read line;
do
var=$(echo $line | awk '{ print length }')
if [ $var -le 4 ]; then
echo $line >> tmp.file
fi
done < your.file

이는 2단계 프로세스로, 읽을 때 tmp.file에 4자 미만의 줄을 씁니다. comm -23 your.file tmp.file두 파일을 비교하여 공통 라인을 억제한 것이 > you.new.file최종 저장된 버전입니다.

관련 정보