키워드가 나타날 때까지 문자열을 읽고 다른 문자열로 바꿉니다.

키워드가 나타날 때까지 문자열을 읽고 다른 문자열로 바꿉니다.

저는 UNIX를 처음 접했고 쉘 스크립팅을 연습하고 있습니다. 문자열 검색 및 교체가 필요한 응용 프로그램이 있습니다.

file1과 file2에 몇 줄이 있습니다. 검색 키워드가 있습니다. File1과 File2에 모두 키워드가 있는 경우 File2의 키워드 뒤에 오는 문자열을 File1의 키워드 뒤에 오는 문자열로 바꿔야 합니다.

예를 들어:

파일 1:

abc def ghi jkl유닉스열쇠이다

파일에는 3줄이 포함되어 있습니다.유닉스열쇠이다

파일 2:

예문입니다유닉스두 번째 파일에서

2호선입니다,유닉스두 번째 파일의 새 줄

키워드는 "unix"입니다. 여기서 파일 1의 unix 뒤의 문자열은 "is the key"이므로 파일 2의 "unix" 뒤의 문자열(즉 "in the second file")은 "is the key"로 바꿔야 합니다. 따라서 문자열을 읽고 교체한 후 파일의 출력은 다음과 같아야 합니다.

파일 1:

abc def ghi jkl유닉스열쇠이다

파일에는 3줄이 포함되어 있습니다.유닉스열쇠이다

파일 2:

예문입니다유닉스열쇠이다

2호선입니다,유닉스열쇠이다

나는 각각 다음 명령을 사용했습니다

 grep sed awk

하지만 검색과 바꾸기를 결합하는 방법을 알 수 없습니다. 누구든지 위의 작업을 수행하는 방법을 말해 줄 수 있습니까? 어떤 조언이나 도움이라도 대단히 감사하겠습니다.

미리 감사드립니다

답변1

이것은 제공한 예제 파일에서 작동합니다.

replacement=$(sed -n 's/^.*unix\(.*$\)/\1/p' file1) sed -i "s/^\(.*unix\).*$/\1$replacement/" file2

첫 번째 파일의 unix 키워드 뒤에는 한 줄에 한 번만 나타날 수 있는 문자열 값이 하나만 있다고 가정합니다.

요청 시 작동 방식을 간략하게 설명해주세요.

이 두 줄은 쉘 스크립트에 포함되어야 합니다. 첫 번째 sed 정규식은 다음 줄의 일부를 추출합니다.유닉스첫 번째 파일의 키워드. 대체 네트워크변수는 $()명령 대체를 사용하여 해당 부분을 가져온 다음 두 번째 줄에서 변수를 사용하여 두 번째 파일의 키워드 뒤의 줄 부분을 대체합니다.

관련 정보