퀴즈: bash를 사용한 파일 내 문자열 교체

2745 단어 quizbash
안녕하세요, 코더 여러분! 💻

실제 작업에서 가져온 오늘의 퀴즈는 다음과 같습니다.

replace a string in a file using bash.





전제 조건



동적으로 생성된 변수newPath가 있습니다.newPath=/new/path/$(date +"%Y%m%d%H%M%S")/file.jsonPATH_TO_FILE에서 newPath의 값으로 /app/.env의 값을 변경하려고 합니다.

교체 전 파일:

# /app/.env
# there could be lines here
PATH_TO_FILE=/path/to/file.json
# there could be lines here too


교체 후 파일:

# /app/.env
# there could be lines here
PATH_TO_FILE=/new/path/20220630081234/file.json
# there could be lines here too


시작 스크립트




#!/usr/bin/env bash

newPath=/new/path/$(date +"%Y%m%d%H%M%S")/file.json

# your code here


이것에 대한 나의 견해



내 솔루션을 보려면 클릭하십시오.


#!/usr/bin/env bash

newPath=/new/path/$(date +"%Y%m%d%H%M%S")/file.json

sed -iE "s|(PATH_TO_FILE).*|\1=${newPath}|g" /app/.env
-i 옵션은 제자리를 의미합니다. 따라서 /app/.env에 대한 모든 변경 사항이 저장됩니다.
-E는 확장 정규식을 나타냅니다.

전통적으로 우리는 예를 들어 /를 교체할 때 s/to_be_replaced/replacement/g를 사용합니다.
파일 경로를 다루기 때문에 newPath에서 슬래시를 이스케이프 처리해야 하지만 더 좋은 방법이 있습니다. 다른 구분 기호를 사용하는 것입니다. 여기서는 |를 사용하고 있지만 원하는 경우 @를 사용할 수 있습니다.
\1는 우리의 경우 PATH_TO_FILE인 괄호로 캡처된 것을 보유합니다.

그리고 그게 다야!

이 솔루션을 개선하는 방법에 대한 의견을 환영합니다.



즐거운 코딩하세요! ⌨️

좋은 웹페이지 즐겨찾기