개발자
리눅스 sed 정규표현식인데요 ㅠ A 파일과 B파일 C파일이 있을때, 공통경로를 추출하는 내용인데요 Common_path=$({echo $a파일경로; echo b파일 경로; echo c파일경로;} | sed -e 'N;s/^\(.*\).*\n\1.*$/\1\n\1/;D')하면 추출되는데 도저히 뜯어봐도 이해가 안됩니다 ㅠ 역참조로 모든 문자에 대해 선언하고 나서 (.*)니까... 바로 \1로 참조하면 경로를 다 가져오는거 아닌가요?? 물어볼데가 여기밖에 없네요 ㅠ
답변 1
'sed'와 정규표현식을 이용하여 공통 경로를 추출하는 과정에 대해 설명드리겠습니다. 먼저, 해당 코드를 조금 더 쉽게 이해하기 위해 아래와 같이 변경하겠습니다. (#0) 이제 해당 코드의 각 부분을 살펴보겠습니다. 1. 'echo -e "$a파일경로\n$b파일경로\n$c파일경로"': 이 부분은 파일 경로를 한 라인씩 출력합니다. 예를 들어 다음과 같이 출력됩니다.(#1) 2. 'sed -e 'N;s/^\(.*\).*\n\1.*$/\1\n\1/;D'': 이 부분에서 복잡한 정규표현식이 사용되었습니다. 각 단계별로 살펴보겠습니다. - 'N': 이 명령은 다음 줄을 읽어서 현재 패턴 스페이스에 추가합니다. 따라서 패턴 스페이스에 두 줄이 들어갑니다. - 's/^\(.*\).*\n\1.*$/\1\n\1/': 이 명령은 현재 패턴 스페이스에서 공통 경로 부분을 찾아 두 줄로 만듭니다. - '^\(.*\).*\n\1.*$': 이 정규표현식은 두 줄의 시작부터 가장 긴 공통 부분을 찾습니다. '\1'은 첫 번째 줄의 시작부터 공통 부분까지를 참조합니다. 이 정규표현식은 두 줄이 같은 문자열로 시작하고, 이후에 다른 문자열이 올 때까지의 부분을 찾습니다. - '\1\n\1': 이 부분은 찾은 공통 부분을 두 줄로 만듭니다. - 'D': 이 명령은 패턴 스페이스의 첫 번째 줄을 삭제하고, 다음 줄이 첫 번째 줄이 되도록 합니다. 이 과정을 반복하여 공통 경로가 완전히 추출됩니다. 위 코드는 파일 경로들 사이에서 가장 긴 공통 경로를 찾는 방법을 제공합니다. 여러 경로에서의 공통 부분을 찾기 위해 정규표현식과 'sed' 명령을 활용한 것입니다.
1 2 3 4 5 6 7
#0 Common_path=$(echo -e "$a파일경로\n$b파일경로\n$c파일경로" | sed -e 'N;s/^\(.*\).*\n\1.*$/\1\n\1/;D') #1 /path/to/common/partA /path/to/common/partB /path/to/common/partC
커리어리 AI 봇의 답변을 평가해 주세요!
vetQ
작성자
농림축산검역본부 연구자 • 2023년 03월 29일
사람이 만들었지만 사람보다 낫네요. 최고!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!