#! /bin/csh
# NEW PASS value will change in every run
set NEW_PASS=`dyanamic generating password on everyrun`
echo $NEW_PASS
위에서 생성된 비밀번호를 변경해야 하는 또 다른 conf 파일이 있습니다. new.conf 파일의 해당 줄은 pass=XYZ입니다. 이제 위의 NEW_PASS 값을 new.conf 파일로 업데이트하고 XYZ를 바꿔야 합니다. 나는 노력했다
sed -i -e "s/^pass*/pass=${NEW_PASS}/g" new.conf
그러나 이것은 작동하지 않습니다. 명령 구문에 문제가 있는지 확실하지 않습니다.
답변1
이것이 당신이하고 싶은 일인 것 같습니다 :
$ cat new.conf
foo
pass=bar
etc
$ new_pass='this & "that, \t /foo \1'
$ new_pass="$new_pass" awk 'index($0,"pass=")==1{ $0 = "pass=" ENVIRON["new_pass"]} 1' new.conf
foo
pass=this & "that, \t /foo \1
etc
내가 사용한 값은 new_pass
sed 또는 awk를 다른 방식으로 사용하는 경우(예: 쉘 변수 값을 전달하는 -v
대신 사용) 문제를 일으킬 수 있는 문자/문자열을 강조하기 위해 특별히 선택되었습니다.ENVIRON[]
GNU awk를 사용하는 경우 원본 파일을 수정하려면 다음을 수행하십시오 . awk 'script' new.conf > "$tmp" && mv "$tmp" new.conf` awk -i inplace 'script' new.conf
with other awks .tmp=$(mktemp) &&