![sed를 사용하여 패턴이 아닌 문자열을 다른 문자열로 바꾸는 방법은 무엇입니까?](https://linux55.com/image/139204/sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%A8%ED%84%B4%EC%9D%B4%20%EC%95%84%EB%8B%8C%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EB%8B%A4%EB%A5%B8%20%EB%AC%B8%EC%9E%90%EC%97%B4%EB%A1%9C%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
패턴을 파일의 다른 문자열과 일치시키기 전에 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"