여러 줄이 포함된 파일이 있습니다. 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