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}'