sed가 모든 항목을 대체하지 않는 이유는 무엇입니까?


118

이 코드를 bash에서 실행하면 :

echo dog dog dos | sed -r 's:dog:log:'

출력을 제공합니다.

log dog dos

모든 개를 대체하려면 어떻게해야합니까?


2
당신은 필요 g글로벌 교체의 깃발을, 당신은 필요가 없습니다 -r여기도 옵션을 선택합니다.
크리스 시모어

답변:


188

gsed 가 패턴 버퍼 내용의 전역 대체를 수행하도록 수정자를 추가해야합니다 .

echo dog dog dos | sed -e 's:dog:log:g'

sed에 대한 환상적인 문서를 보려면 http://www.grymoire.com/Unix/Sed.html을 확인 하십시오 . 이 전역 플래그는 http://www.grymoire.com/Unix/Sed.html#uh-6에 설명되어 있습니다.

공식 문서 GNU sedhttp://www.gnu.org/software/sed/manual/에 있습니다 .


1
여기에 GNU sed에 대한 코너 케이스 추가 : sed -E 's,foo,bar,g'글로벌 작업을 수행하지 않습니다. 그것을 변경하면 sed -E -e 's,foo,bar,g'작동합니다.
Melvyn Sopacua

23

당신은 넣어 가지고 g끝에서, 그것은 "글로벌"의 약자 :

echo dog dog dos | sed -r 's:dog:log:g'
                                     ^

1
sed -e는 존재하지 않는 sed -r 대신 사용해야합니다.
딜런 다니엘스

1
@DylanDaniels man sedUbuntu 에 따르면 이 -r옵션은 "확장 정규식 사용"을 의미합니다. 따라서 주어진 명령은 제대로 작동하지만 확장 정규식의 기능이 작동 할 필요는 없습니다.
크레이그 맥퀸
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.