정규식 문자열을 바꾸는 Linux sed 명령

정규식 문자열을 바꾸는 Linux sed 명령

다음과 같은 줄이 포함된 텍스트 파일을 프로그래밍 방식으로 편집하려고 합니다.

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"

관련 정보