경로에서 두 번째 요소를 추출하는 방법은 무엇입니까? [복사]

경로에서 두 번째 요소를 추출하는 방법은 무엇입니까? [복사]

sed를 사용하여 이러한 패턴을 어떻게 추출할 수 있나요?

이것이 나의 길입니다:/sample/xyz/logs/test.logs

출력은 다음과 같아야 합니다: xyz

예를 들어 다음과 같이 경로가 계속 변경되면 어떻게 가능합니까?

/example/xyz/log/test.logs?

sed를 사용하시나요, 아니면 awk를 사용하시나요?

답변1

나는 이를 수행하는 3가지 방법을 알고 있습니다. 경로가 표준 입력으로 전달된다고 가정합니다.

방법 1

echo "/sample/xyz/logs/test.logs" | cut -d / -f 3

그러면 지정된 구분 기호를 사용하여 입력이 잘리고 -d /원하는 xyz 부분인 세 번째 필드가 선택됩니다.

방법 2

echo "/sample/xyz/logs/test.logs" | awk -F / '{print $3}'

awk는 매우 복잡한 논리를 작성할 수 있는 매우 강력한 명령입니다. 이 간단한 형태로 이를 사용하여 방법 1과 동일한 작업을 수행할 수 있습니다.

방법 3

echo "/sample/xyz/logs/test.logs" | sed -r 's/^\/\w+\/(\w+)\/.*/\1/g'

정규 표현식과 함께 사용할 경우 sed첫 번째 슬래시, 후속 단어 및 후속 슬래시를 생략할 수 있습니다. 두 번째 슬래시 뒤의 단어를 가져와 나머지를 삭제합니다.

보시다시피 이러한 방법의 복잡성이 증가합니다.

답변2

스크립트가 bash/dash/ksh/zsh인 경우 외부 도구가 필요하지 않으며 매개변수 대체를 통해 답을 얻을 수 있습니다.

path=/sample/xyz/logs/test.logs
path=${path#/*/}
echo ${path%%/*}
  • #왼쪽에서 제거하십시오.
  • %오른쪽에서 제거하세요.
  • 문자를 두 배로 늘리면 일치 항목이 탐욕스러워집니다. 즉, 가능한 한 많이 일치합니다.

답변3

항상 경로의 두 번째 부분을 원하면 다음을 시도하십시오.

echo "/sample/xyz/logs/test.logs" | awk -F/ '{print $3}'

관련 정보