패턴을 파일의 다른 문자열과 일치시키기 전에 sed를 사용하여 모든 것을 바꿔야 합니다.
내 파일에는 다양한 경로가 있습니다. 이러한 경로의 마지막 몇 가지 구성 요소는 사용자에 관계없이 동일하지만 처음 몇 가지 구성 요소는 변경됩니다.
예를 들어사용자 1, 파일에는 다음 경로가 포함되어 있습니다
build:
- "/Users/user1/Projects/Stash/sdk/license.txt"
~을 위한사용자 2, 경로는 다음과 같습니다.
build:
- "/Users/user2/Documents/Work/sdk/license.txt"
마지막 2개의 구성 요소는 "/sdk/license.txt“이건 모든 사용자에게 동일합니다.
이 구성 요소 앞의 모든 항목을 해당 사용자에게만 해당되는 경로로 사용자가 제공한 경로로 바꾸고 싶습니다. sed를 사용하여 이 교체를 수행하려면 어떻게 해야 합니까? 동일한 목적을 달성하기 위해 Perl 스크립트를 사용하고 있습니다.
답변1
간단히 역 참조를 사용할 수 있습니다
sed -e 's/\(^[ ]*\- "\)\(.*\)\(\/sdk\/license\.txt"$\)/\1path_with_which_to_be_replaced\3/'
여기
\(....\)
일치 항목을 그룹화하고 나중에 사용하기 위해 저장하는 데 사용되며 교체할 때 사용되며 \1
\2
변수 이름으로 사용할 수 있습니다.
그래서 귀하의 요청에 따라 라인을 세 그룹으로 나누었습니다.
\(^[ ]*\- "\)
~을 위한space - "
\(.*\)
교체할 부품의 경우, 예:/Users/user2/Documents/Work
\(\/sdk\/license\.txt"$\)
같은 부분에 대해 즉sdk/license.txt"