sed는 특정 패턴을 가져와 변경합니다.

sed는 특정 패턴을 가져와 변경합니다.

다음 내용이 포함된 파일이 있습니다.

<general id="7" src="xyz" srcType="abc" link="positive" />
<general id="3" src="xyz" srcType="pqr" link="positive" />
..

src각 이름을 대문자로 바꾸려고 합니다 . 예를 들어, 위에서는 모든 것을 (첫 글자는 대문자) xyz로 바꾸고 싶습니다 .Xyz

예상 출력은 다음과 같습니다.

<general id="7" src="Xyz" srcType="abc" link="positive" />
<general id="3" src="Xyz" srcType="pqr" link="positive" />
..

시험을 마친정규식 패턴은 src="(.*?)"줄에서 "xyz"를 추출할 수 있지만 이를 사용하여 sed파일을 바꾸는 방법은 무엇입니까?

따라해봤는데 안되네요

sed -E 's/srcName="(.*?)"/Xyz/1' 파일 이름

보너스 질문인데 어떻게 요약할 수 있나요? scr="와 사이의 모든 내용은 "첫 번째 문자가 대문자인 단어로 변환될 수 있습니다.

답변1

XML을 편집하려면 XML 인식 도구를 사용하십시오. 예를 들어,xsh, 내가 사용하는 유지 관리 도구입니다.

open file.xml ;
for //@src set . xsh:subst(., "(.)", "\U$1") ;
save :b ;

답변2

XML 지원 도구가 확실히 좋은 방법입니다! 빠른 해킹:

GNU에서 sed:

sed -r 's/src="([a-z])/src="\U\1\E/g'  file.xml

더 복잡한 변경에는 Perl을 권장합니다.

perl -pe 's/src="\K(\w+)/ucfirst($1)/e'   file.xml

어디

  • perl -pe command"readline, 명령, 인쇄" 루프입니다.
  • s/regexp/expression/e regexp를 eval(expression)의 결과로 바꿉니다.
  • src="\K 왼쪽 컨텍스트 모드입니다

답변3

awk 명령을 사용해 보았지만 훌륭하게 작동합니다.

awk -F 'src="' '{$2=(toupper(substr($2,1,1))substr($2,2));$2="src="$2;print $0}' filename|sed 's/src=/&"/g'

산출

<general id="7"  src="Xyz" srcType="abc" link="positive" />
<general id="3"  src="Xyz" srcType="pqr" link="positive" />

관련 정보