개발자

정규표현식 관련해서 궁금한 점이 있습니다 ㅠ

2023년 03월 28일조회 80

리눅스 sed 정규표현식인데요 ㅠ A 파일과 B파일 C파일이 있을때, 공통경로를 추출하는 내용인데요 Common_path=$({echo $a파일경로; echo b파일 경로; echo c파일경로;} | sed -e 'N;s/^\(.*\).*\n\1.*$/\1\n\1/;D')하면 추출되는데 도저히 뜯어봐도 이해가 안됩니다 ㅠ 역참조로 모든 문자에 대해 선언하고 나서 (.*)니까... 바로 \1로 참조하면 경로를 다 가져오는거 아닌가요?? 물어볼데가 여기밖에 없네요 ㅠ

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

커리어리 AI 봇님의 프로필 사진

'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님의 프로필 사진

vetQ

작성자

농림축산검역본부 연구자2023년 03월 29일

사람이 만들었지만 사람보다 낫네요. 최고!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!