먼저, 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 ... -exec
with 를 사용하면 {}
이 구문이 마음에 들지 않아서 보통 다음으로 끝냅니다.\;
나는 xargs를 사용하는 것을 선호합니다
find . -name list.txt | xargs sed -i 's/1234/var&2018+&/g'
결말 g는 발견된 횟수만큼 대체됩니다.
또한 이것은 명백할 수도 있습니다. 하위 트리에 파일이 몇 개 있는지는 모르지만 list.txt
파일이 하나만 있으면 find
.
sed -i 's/pattern/replacement/options' filename