특정 수의 특정 문자가 포함된 줄을 인쇄합니다.

특정 수의 특정 문자가 포함된 줄을 인쇄합니다.

많은 파일 경로와 해당 정보를 저장하는 큰 텍스트가 있습니다.

# just for demostration
/a/b/c/d/e
/a/b/c/d
/a/b/c
/a/b
/a
/b/c
/b
/c/d
/c
....

특정 수의 특정 문자가 있는 문자만 표시하고 싶습니다. 예를 들어,

  1. 단 하나/
  2. 2개 이하/

이렇게 하면 루트 폴더만 추출하거나 첫 번째 수준 하위 폴더만 추출합니다.

답변1

Awk해결책:

-- 하나만 /:

awk -v sep=1 'BEGIN{ FS=OFS="/"; sep += 1 }NF == sep' file

산출:

/a
/b
/c

-- 2개 이하 /:

awk -v sep=2 'BEGIN{ FS=OFS="/"; sep += 1 }NF <= sep' file

산출:

/a/b
/a
/b/c
/b
/c/d
/c

  • sep- 변경 가능;분할기세다
  • FSOFS-는 각각 필드 구분 기호와 출력 필드 구분 기호입니다.
  • NF- 대표하다총 필드 수

위의 방법을 하나의 명령으로 결합해야 하는 경우 awk:

awk -v sep=1 'BEGIN{ FS=OFS="/"; sep += 1 }(sep==2 && NF==sep) || (sep>2 && NF<=sep)' file

답변2

확장된 정규식을 사용하십시오:

grep -E '^([^/]*/[^/]*){1,2}$' input

결과는 다음과 같습니다.

/a/b
/a
/b/c
/b
/c/d
/c

정규식 구문은 다음을 의미합니다.

  • ^- 줄의 시작 부분에 고정
  • ( ... )- 다음 비트를 함께 그룹화하십시오.
  • [^/]*- 슬래시가 아닌 문자, 0개 이상
  • /- 슬래시
  • [^/]*- 슬래시가 아닌 문자, 0개 이상
  • {1,2}- 하나 또는 두 그룹 모두
  • $- 라인 끝까지 앵커

관련 정보