sed에는 두 가지 조건이 있습니다

sed에는 두 가지 조건이 있습니다

여러 줄이 포함된 파일이 있습니다. 25자로 시작 하고 25자를 초과하는
파일에서 항목을 제거하고 싶습니다 .nnn

현재는 두 가지만 만들 수 있습니다 sed.

sed '/^nnn/d' input.txt > output.txt
sed '/^.\{25\}./d' input.txt > output.txt

하지만 그것은 내 목표가 아닙니다.

입력 예:

nnnASDDGfdgdsfndsjfndsjfdfgGHGHGhfhfd
nnnASDDGfdgdsfn
sadbSADSDDFSDFrrrRRRRRRRttTGGGG

원하는 출력:

nnnASDDGfdgdsfn
sadbSADSDDFSDFrrrRRRRRRRttTGGGG

답변1

이는 다음 방법으로 수행하는 것이 가장 좋습니다 awk.

awk '/^nnn/ && length >= 25 { next } { print }' file

/^nnn/주어진 정규식("다음으로 시작하는 줄")과 일치 합니다 nnn. length(또는 length($0))은 입력 라인의 길이를 반환합니다. 표현식이 일치하고 길이가 25 이상이면 해당 행은 무시되고, 그렇지 않으면 인쇄됩니다. 입력하기가 너무 길다고 느껴지면 { print }.1

또는,

awk '!/^nnn/ || length < 25' file

이것은 동일한 작업을 수행하지만 반대 조건을 사용합니다. 행이 표현식과 일치하지 않거나 25자 미만인 경우 인쇄됩니다. 다른 줄은 무시됩니다.

이 두 제품 모두

nnnASDDGfdgdsfn
sadbSADSDDFSDFrrrRRRRRRRttTGGGG

주어진 입력 데이터에 대해.

답변2

sed해결책:

sed -E '/^nnn.{23}/d' file
  • /^nnn.{23,}/nnn- 25자 이상으로 시작하는 줄만 일치합니다. ( .{23,}- 길이가 23자 이상인 문자 시퀀스와 일치합니다.)
  • d- 일치하는 라인 삭제

산출:

nnnASDDGfdgdsfn
sadbSADSDDFSDFrrrRRRRRRRttTGGGG

그리고awk주문하다:

awk '!/^nnn.{23}/' file

답변3

다음을 수행할 수 있습니다.

sed -e '/^nnn/!b' -e '/.\{26\}/d'

또는:

sed '/^nnn/{/.\{26\}/d;}'

답변4

grep 사용

grep -v '^nnn.\{23\}' infile

관련 정보