다음과 같은 문자열이 있다고 가정해 보겠습니다.
xyz="123" ; acd="234" ; plk="1234" ; apl="3456" ; www="2342"
plk="123"
이제 and를 무시하고 sed를 사용하여 교체하고 싶습니다 .plk="789"
;
""
산출:
xyz="123" ; acd="234" ; plk="789" ; apl="3456" ; www="2342
이 문제를 해결하도록 도와주시고 다른 명령을 사용할 수 있는지 알려주세요.
답변1
plk="1234"
로 바꾸려면 plk="789"
다음을 수행할 수 있습니다.
$ sed 's/plk="1234"/plk="789"/g' file
xyz="123" ; acd="234" ; plk="789" ; apl="3456" ; www="2342"
notplk="1234"
그러나 이 항목도 로 대체됩니다 . 이를 방지하려면 단어 경계만 일치시키는 데 plk="789"
사용할 수 있습니다 .\<
$ sed 's/\<plk="1234"/plk="789"/g' file
xyz="123" ; acd="234" ; plk="789" ; apl="3456" ; www="2342"
\<
100% 이식 가능한지는 확실하지 않으므로 만일의 경우에 대비하여 다음과 같이 할 수도 있습니다.
$ sed -E 's/(^| )plk="1234"/plk="789"/g' file
xyz="123" ; acd="234" ;plk="789" ; apl="3456" ; www="2342"
아니면 대신 Perl을 사용하세요:
$ perl -pe 's/\bplk="1234"/plk="789"/g' file
xyz="123" ; acd="234" ; plk="789" ; apl="3456" ; www="2342"
위의 모든 명령( 및 sed
) 을 사용하면 플래그를 추가하여 원본 파일을 제자리에서 편집 perl
할 수 있습니다 .-i
위의 명령은 대체됩니다모두plk="1234"
파일의 각 줄에서 발생하는 횟수입니다. 귀하의 질문에 설명하지 않았지만 제목에 "열 n"을 언급하셨습니다. 열을 어떻게 정의했는지, 무슨 뜻인지는 모르겠지만 ;
세 번째로 구분된 열에서만 이 교체를 수행하려는 경우 다음을 시도해 볼 수 있습니다(GNU 사용 awk
).
$ awk -F';' 'BEGIN{OFS=";"}{$3=gensub(/plk="1234"/,"plk=\"789\"",1,$3); }1' file
xyz="123" ; acd="234" ; plk="789" ; apl="3456" ; www="2342"