많은 파일 경로와 해당 정보를 저장하는 큰 텍스트가 있습니다.
# just for demostration
/a/b/c/d/e
/a/b/c/d
/a/b/c
/a/b
/a
/b/c
/b
/c/d
/c
....
특정 수의 특정 문자가 있는 문자만 표시하고 싶습니다. 예를 들어,
- 단 하나
/
- 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
- 변경 가능;분할기세다FS
및OFS
-는 각각 필드 구분 기호와 출력 필드 구분 기호입니다.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}
- 하나 또는 두 그룹 모두$
- 라인 끝까지 앵커