while 루프를 사용하여 다른 파일에 있는 변수에서 sed 일치 항목 찾기

while 루프를 사용하여 다른 파일에 있는 변수에서 sed 일치 항목 찾기

여기에 교체해야 할 파일이 수천 개 있습니다. 그래서 나는 모든 이전 변수를 반복하고 새 변수로 바꾸는 bash 프로그램을 만들려고 합니다. 이것이 내가 현재 가지고 있는 것입니다.

예를 들어 이전 변수와 새 변수가 모두 포함된 파일이 있으므로 첫 번째 값을 두 번째 값으로 바꿔야 합니다. 이 파일의 이름을 new로 지정했습니다.

web_lgl,web_lgl_index
web_matchmaker,web_matchmaker_index
web_mds,web_mds_index
web_metadata,web_metadata_index
web_mqmon,web_mqmon_index
web_pdconfig,web_pdconfig_index
web_people,web_people_index
web_pescado,web_pescado_index

이제 다음과 같이 while 루프를 작성했습니다.

while IFS="," read old new; do
find . -name "savedsearches.conf" -exec sed "s/$old/$new/g" '{}' \; 
done < new

이것은 실제로 작동합니다. 이전 값을 새 값으로 대체합니다. 하지만 savesearches.conf 파일에서 다음과 같은 특정 문자열을 대체하려고 합니다.

index="web_lgl"
index = "web_matchmaker"
index= "web_pdconfig"

파일에 있는 임의의 문장 대신

description: web_lgl contains AWS data. which is collected from AWS.

따라서 index=로 시작하는 변수만 대상으로 지정하고 해당 문자열의 다른 모든 항목은 무시할 수 있도록 bash 스크립트를 조정해야 합니다. bash 프로그램에 index=를 추가하려고 시도했지만 아무 히트도 얻지 못했습니다. 예를 들어, 다음 코드는 적중을 생성하지 않습니다.

while IFS="," read old new; do
find . -name "savedsearches.conf" -exec sed "s/index=$old/index=$new/g" '{}' \; 
done < new

find 명령으로 찾은 임의의 문장이 아닌 index= 뒤의 값을 구체적으로 대상으로 지정하도록 bash 스크립트를 조정할 수 있는 방법이 있습니까?

답변1

sed의 이 정규식은 으로 시작하는 줄만 바꿔야 합니다 index.

while IFS="," read old new; do
find . -name "savedsearches.conf" -exec sed "/^index/s/index=$old/index=$new/g" '{}' \; 
done < new

관련 정보