우분투 18 빌드
in [define( 'AUTH_KEY',]
없이 이 텍스트를 찾은 다음 해당 줄을 복사하고 에서 동일한 줄을 바꾸려고 합니다 . 나는 여러 가지 옵션을 시도했지만 성공하지 못했습니다 .[]
/var/www/file1.txt
/var/www/file2.php
sed
awk
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회 이상 일치합니다.
\047
8진수 작은따옴표입니다 '
.
첫 번째 파일이 처리되면 일치하는 레코드가 변수에 저장됩니다 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"