동일한 패턴과 일부 가변 콘텐츠로 패턴 교체

동일한 패턴과 일부 가변 콘텐츠로 패턴 교체
#! /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_passsed 또는 awk를 다른 방식으로 사용하는 경우(예: 쉘 변수 값을 전달하는 -v대신 사용) 문제를 일으킬 수 있는 문자/문자열을 강조하기 위해 특별히 선택되었습니다.ENVIRON[]

GNU awk를 사용하는 경우 원본 파일을 수정하려면 다음을 수행하십시오 . awk 'script' new.conf > "$tmp" && mv "$tmp" new.conf` awk -i inplace 'script' new.confwith other awks .tmp=$(mktemp) &&

관련 정보