найти текст в одном файле и заменить текстом из другого файла SED или AWK

Лайнер awk one -:

awk -v patt="0" -v prev=1 '
    $0 ~ patt {print NR - prev; prev = NR} 
    END {print NR + 1 - prev}
' file
0
08.02.2021, 22:44
2 ответа
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]соответствует символу пробела или табуляции, *соответствует шаблону ноль или более раз. \047— восьмеричная одинарная кавычка '.

Когда первый файл будет обработан, сохраните соответствующую запись в переменной line. Когда второй файл будет обработан, замените совпадающую запись содержимым line.

FNR!=NRраспечатывает записи второго файла.

1
18.03.2021, 22:31

Это может быть вариант:

# 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^'  );

0
18.03.2021, 22:31

Теги

Похожие вопросы