한 파일에서 텍스트를 찾아 다른 파일 SED 또는 AWK의 텍스트로 바꿉니다.

한 파일에서 텍스트를 찾아 다른 파일 SED 또는 AWK의 텍스트로 바꿉니다.

우분투 18 빌드

in [define( 'AUTH_KEY',]없이 이 텍스트를 찾은 다음 해당 줄을 복사하고 에서 동일한 줄을 바꾸려고 합니다 . 나는 여러 가지 옵션을 시도했지만 성공하지 못했습니다 .[]/var/www/file1.txt/var/www/file2.phpsedawk

awk '/"define\( 'AUTH_KEY',"/' /var/www/file1.txt > /var/www/file2.php
sed -i 's/"define\( 'AUTH_KEY',"/' /var/www/file1.txt >> /var/www/file2.php

file1.txt행을 포함합니다

define('AUTH_KEY',         '{++X!upib~T.#C.&ykXDQpQ<nyrD7jadfu*adk^);

file2.php행을 포함합니다

define( 'AUTH_KEY',         'put your unique phrase here' );

file1.txt에서 동일한 줄을 바꾸려면 from 줄이 필요합니다 file2.php.

답변1

awk '
  /define\([ \t]*\047AUTH_KEY\047,/{ 
    if (FNR==NR){ line=$0 }
    else{ $0=line }
  }
  FNR!=NR
' /var/www/file1.txt /var/www/file2.php > /var/www/file2.php.new
mv /var/www/file2.php.new /var/www/file2.php

대괄호 표현식은 [ \t]공백이나 탭 문자 및 *패턴과 0회 이상 일치합니다. \0478진수 작은따옴표입니다 '.

첫 번째 파일이 처리되면 일치하는 레코드가 변수에 저장됩니다 line. 두 번째 파일이 처리되면 일치하는 레코드가 line.

FNR!=NR두 번째 파일의 기록을 인쇄합니다.

답변2

이는 옵션일 수 있습니다.

# save the AUTH_KEY into a variable
$ key=$(awk -F"'" '/AUTH_KEY/ { print $4 }' file1.txt)

# use the variable to replace the same value in the other file
$ awk -F"'" -v val="'${key//\\/\\\\}'" 'BEGIN { OFS="" } $4 = val,$2 = "'\''"$2"'\''"' file2.php

$ cat file2.php | grep AUTH_KEY
define(  'AUTH_KEY',          '{++X!upib~T.#C.&ykXDQpQ<nyrD7jadfu*adk^'  );

답변3

base='/var/www'
tmpf=$(mktemp)
f1="$base/file1.txt"
f2="$base/file2.php"

ws='[[:blank:]]\{1,\}'
re_bre="define[(]$ws'AUTH_KEY'"

sed -e "/$re_bre/q;d" "$f1" |
sed -e "1h;/$re_bre/g;1d" - "$f2" > "$tmpf" &&
mv -f -- "$tmpf" "$f2"

관련 정보