![정규식 문자열을 바꾸는 Linux sed 명령](https://linux55.com/image/188708/%EC%A0%95%EA%B7%9C%EC%8B%9D%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EB%B0%94%EA%BE%B8%EB%8A%94%20Linux%20sed%20%EB%AA%85%EB%A0%B9.png)
다음과 같은 줄이 포함된 텍스트 파일을 프로그래밍 방식으로 편집하려고 합니다.
db.username="tata"
db.password="toto"
나는 그것이 다음과 같이 보이기를 원합니다 :
db.username="fofo"
db.password="bar"
정규식은 다음과 같습니다.
^\s*db.username="([^"]*)
이 명령을 사용하려고 하면
sed -i -E '^\s*db.username="([^"]*)' 'fofo' file.txt
오류가 발생합니다.
sed: -e expression #1, char 1: unknown command: `^'
답변1
grep
정규식과 대체를 혼합하고 있습니다 sed
.
다음 중 하나를 사용하세요.
sed -e '/db\.username/s/"[^"]*"/"foo"/' txt
db.username="foo"
db.password="toto"
어디
/db\.username/
sed에게 db.username을 온라인으로 작동하라고 지시합니다(.
sed의 특수 문자).s
바꾸다"[^"]*"
인용문 1개, 인용문이 아닌 여러 개의 인용문, 인용문 1개"foo"
/db.username/
일치합니다db_username
,dbXusername
....
또는
sed -e 's/db\.username="[^"]*"/db.username="foo"/' txt
db.username="foo"
db.password="toto"
더 자세히 설명하기 위해 sed
패턴을 캡처할 수 있습니다.
sed -e 's/db\.username="\([^"]*\)"/usename is \1/' txt
usename is tata
db.password="toto"
\( \)
텍스트 캡처\1
처음 캡처한 텍스트 사용
grep
좋아요
grep -Eo '"[^"]*"' txt
"tata"
"toto"