Bash 스크립트의 SED : Bash 스크립트의 변수에서 나오는 특수 문자로 텍스트를 바꾸는 방법

Bash 스크립트의 SED : Bash 스크립트의 변수에서 나오는 특수 문자로 텍스트를 바꾸는 방법

먼저, bash 스크립트에 특수 문자를 포함하는 변수가 있습니다. 여기에 그 예가 있습니다. 목록.txt :

user = root
password = 1234

배시 스크립트:

#!/bin/sh
var1 = var&2018+&
find . -name "list.txt" -exec sed -i "s/1234/"$var1"/g" {} +

스크립트를 실행했을 때 결과는 var12342018+1234입니다.

업데이트 1(Oliv의 답변):

var1='var&2018+&'
find . -name "*list.txt" -exec bash -c 'sed -i "s/1234/$2/g" $1' _ {} "$var1" \;

결과는 여전히 : 비밀번호 = var12342018+1234

어쩌면 누군가가 나를 도울 수 있습니다. 감사합니다

답변1

먼저 변수를 인용해야 합니다 var1.

비밀번호를 변수로 제공하기 위해 명령 bash -c에 사용할 수 있습니다 .find

 var1='var\&2018+\&'
 find . -name "list.txt" -exec bash -c 'sed -i "s/1234/$2/g" $1' _ {} "$var1" \;

답변2

&정규 표현식의 전체 일치를 나타내는 특수 문자 라는 것을 알아야 하는 문제를 이해하는 데 도움이 될 수 있습니다 .

가 발견 되었으므로 1234으로 바꾸면 var12342018+1234두 개가 &일치하는 문자열이 됩니다.

제가 말씀드리고 싶은 또 다른 점은 개인적인 취향이지만 find ... -execwith 를 사용하면 {}이 구문이 마음에 들지 않아서 보통 다음으로 끝냅니다.\;

나는 xargs를 사용하는 것을 선호합니다

find . -name list.txt | xargs sed -i 's/1234/var&2018+&/g'

결말 g는 발견된 횟수만큼 대체됩니다.

또한 이것은 명백할 수도 있습니다. 하위 트리에 파일이 몇 개 있는지는 모르지만 list.txt파일이 하나만 있으면 find.

sed -i 's/pattern/replacement/options' filename

관련 정보