사이의 모든 것을 일치논평:다음;또는줄 끝그리고 그것을 단어로 바꾸세요.술집
s="/home/user/14.JPG;comment:foo;sometag;sort:30"
sed "s/comment:(\w+)/\bar/g" <<< $s
상품을 반품하다
/home/user/14.JPG;comment:foo;sometag;sort:30
바꾸다
/home/user/14.JPG;comment:bar;sometag;sort:30
내가 뭘 잘못했나요?
답변1
먼저 ERE(확장 정규 표현식)를 사용하려고 하지만 Sed는 기본적으로 BRE(기본 정규 표현식)를 사용합니다. 즉, ()
그룹화 및 +
"하나 이상"의 경우 ERE입니다. 자세한 내용은 읽어보십시오.내 정규 표현식이 X에서는 작동하지만 Y에서는 작동하지 않는 이유는 무엇입니까?. ERE를 활성화하려면 이 -E
플래그를 사용하세요(그러나 우리 솔루션에서는 필요하지 않습니다).
comment:(\w+)
너도 어울리 니까 그것만으로는 부족하지만
- 다시 소개할 필요는 없습니다
comment:
. 교체 슬롯에 넣으십시오. \w
GNU 확장 으로질문에서 주장하는 것처럼 "모든 것이 다음으로 이동합니다"(\w+)
가 아닌 단어 문자를 일치시킵니다 .;
[^;]*
해결책은
sed 's/comment:[^;]*/comment:bar/g'
답변2
그룹을 사용하고 마비를 통해 통화할 수 있습니다. 그룹화하여 yyy를 xxx로 바꿉니다.
$ echo "foo yyy bar" | sed 's/\(foo\).*\( bar\)/\1 xxx \2/'
foo xxx bar
귀하의 경우:
sed "s/\(comment:\).*\(sometag\)/\1bar\2/g" <<< $s