sed를 사용하여 패턴을 제외한 모든 것을 다른 문자열로 대체하는 방법은 무엇입니까?

sed를 사용하여 패턴을 제외한 모든 것을 다른 문자열로 대체하는 방법은 무엇입니까?

패턴을 파일의 다른 문자열과 일치시키기 전에 모든 것을 바꾸려면 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"

관련 정보