일치하는 문자열로 파일의 문자열 바꾸기

일치하는 문자열로 파일의 문자열 바꾸기

다음과 같은 파일이 있습니다

$vnic = "ocid1.vnic.oc1.ap-mumbai-1.abrg6ljrqwrgvdjuhhm55plktmxx7gz723mpcpuspa5rdmtd7spi5egww2ua";

$nsg1 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaawzei5sybgstutahgils36oohlvlpz76f7zdl7hvbi5oqzxtiw7va";
$nsg2 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaa6kjmsfkyxfkcorcys6zrgxtyjquwy7mla27n2hqdl4aqubkgd6dq";
$nsg3 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaavar4pef6iqnwuui6qjawxdz4ui3vs4tyges64isde6wufwi44cqa";
$nsg4 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaaaaxzwne6pnzzjku2ld6m77dt7lr2m2qc4ix3mmrzx5baux5s5n7a";
$nsg5 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaatxe7bmd5n24don5473nbutcg34some672big7iowyk5f7yjfnmrq";

필요할 때 $vnic, $nsg1, $nsg2, 값을 $nsg3변경 하고 싶습니다. 어떻게 사용할 수 있나요? 아니면 매일 업데이트되는 bash 스크립트에서 사용하고 싶나요?$nsg4$nsg5sedawk

답변1

이것을 사용하면 sed다음을 시도해 볼 수 있습니다.

sed -i "/\$some_field/s/\".*\"/\"$some_val\"/" file

예를 들어 값을 변경하려면 다음을 $vnic사용할 수 있습니다.

some_val="fuzz"
sed -i "/\$vnic/s/\".*\"/\"$some_val\"/" file

/\$vnic/sed 명령을 사용하여 일치하는 행을 선택하십시오 $vnic. With 는 의 값과 s/\".*\"/\"$some_val\"/일치하는 줄에서 큰따옴표(이러한 큰따옴표 포함) 사이의 모든 값을 바꿉니다 ."$some_val

예를 들어, 파일 내용이 다음과 같은 경우:

$vnic = "ocid1.vnic.oc1.ap-mumbai-1.abrg6ljrqwrgvdjuhhm55plktmxx7gz723mpcpuspa5rdmtd7spi5egww2ua";
$nsg1 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaawzei5sybgstutahgils36oohlvlpz76f7zdl7hvbi5oqzxtiw7va";
$nsg2 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaa6kjmsfkyxfkcorcys6zrgxtyjquwy7mla27n2hqdl4aqubkgd6dq";
$nsg3 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaavar4pef6iqnwuui6qjawxdz4ui3vs4tyges64isde6wufwi44cqa";
$nsg4 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaaaaxzwne6pnzzjku2ld6m77dt7lr2m2qc4ix3mmrzx5baux5s5n7a";
$nsg5 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaatxe7bmd5n24don5473nbutcg34some672big7iowyk5f7yjfnmrq";

some_val=fuzz ; sed -i "/\$vnic/s/\".*\"/\"$some_val\"/" file 파일은 다음과 같이 업데이트됩니다.

$vnic = "fuzz";
$nsg1 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaawzei5sybgstutahgils36oohlvlpz76f7zdl7hvbi5oqzxtiw7va";
$nsg2 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaa6kjmsfkyxfkcorcys6zrgxtyjquwy7mla27n2hqdl4aqubkgd6dq";
$nsg3 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaavar4pef6iqnwuui6qjawxdz4ui3vs4tyges64isde6wufwi44cqa";
$nsg4 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaaaaxzwne6pnzzjku2ld6m77dt7lr2m2qc4ix3mmrzx5baux5s5n7a";
$nsg5 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaatxe7bmd5n24don5473nbutcg34some672big7iowyk5f7yjfnmrq";

다른 값을 바꾸려면 동일한 명령을 여러 번 사용하지 않도록 -e옵션을 사용할 수 있습니다. 예를 들면 다음과 같습니다.sed

some_val2=fuzz
some_val=buzz
sed  -e "/\$vnic/s/\".*\"/\"$some_val\"/"  -e "/\$nsg1/s/\".*\"/\"$some_val2\"/"

파일 내용은 다음과 같습니다.

$vnic = "buzz";
$nsg1 = "fuzz";
$nsg2 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaa6kjmsfkyxfkcorcys6zrgxtyjquwy7mla27n2hqdl4aqubkgd6dq";
$nsg3 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaavar4pef6iqnwuui6qjawxdz4ui3vs4tyges64isde6wufwi44cqa";
$nsg4 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaaaaxzwne6pnzzjku2ld6m77dt7lr2m2qc4ix3mmrzx5baux5s5n7a";
$nsg5 = "ocid1.networksecuritygroup.oc1.ap-mumbai-1.aaaaaaaatxe7bmd5n24don5473nbutcg34some672big7iowyk5f7yjfnmrq";

관련 정보