문자열을 여러 줄의 파일 내용으로 대체

문자열을 여러 줄의 파일 내용으로 대체

SALT파일의 문자열을 다른 파일의 내용으로 바꿔야 합니다 . 문제는 입력 파일에 여러 줄이 있다는 것입니다. 내 Bash 스크립트에서 다음과 같은 것을 시도했습니다.

SALT=`cat salt.txt`;
sed "s/SALT/$SALT/" wp-config.php > result.txt

다음과 같은 경우에는 잘 작동합니다.소금.txt한 줄이지만 줄이 더 많으면 실패합니다. 나는 그것이 PERL을 할 수 있다는 것을 읽었습니다. 하지만 어떻게 해야 할지 모르겠습니다. 당신이 나를 도울 수?

답변1

또 다른 perl방법:

perl -pe 's/SALT/`cat salt.txt`/e' wp-config.php > result.txt

여기서 핵심은 명령 결과를 대체 문자열로 /e사용할 수 있게 해주는 regexp 옵션 입니다.perl

답변2

을 고수하고 싶다면 bash문자열이나 파일에 나타나지 않는 문자를 선택하세요. 예를 들어 @; 그 다음에:

SALT=`< salt.txt tr '\n' '@'`
sed "s/SALT/$SALT/" wp-config.php | tr '@' '\n' > result.txt

이 방법으로 교체하기 전에 newline문자열의 문자가 로 변경되고 @교체 후에 @문자가 다시 로 변경되므로 newlinesSALT이상 배열로 처리되지 않고 긴 문자열을 포함하는 변수로 처리됩니다.

답변3

다음을 수행할 수 있습니다.

sed -e "/SALT/{r salt.txt" -e "d}" wp-config.php  > result.txt

salt.txt솔트는 어디에 있고 wp-config.php입력 파일은 어디에 있으며 SALT바꿀 문자열은 무엇입니까?

답변4

perl -e 'open my $S, "<", "salt.txt" or die $!;
         $salt = do { local $/ ; <$S> };
         s/SALT/$salt/, print while <>;
        ' wp-config.php > result.txt

첫 번째 줄은 salt.txt.
두 번째 줄에서는 해당 내용을 $salt 변수로 읽습니다.
세 번째는 명령줄 인수를 파일 이름으로 사용하고 파일을 한 줄씩 읽고 문자열을 바꿉니다.

관련 정보