Изменять строки в файле, только если они совпадают с шаблонами в другом файле

Hay una manera de hacer esto, aunque no usa el comando rpm. Deberá tener el binario rpm2cpiodisponible, y luego simplemente haga:

# cd /mnt/hard_disk
# rpm2cpio  | cpio -idmv

Como mencionaste, tendrás que lidiar con los problemas de integridad de RPMDB después, pero eso hará que los archivos estén en su lugar. Existen numerosas páginas web con información y más detalles al respecto disponibles a través de una simple búsqueda en google, una de ellas eshttps://blog.packagecloud.io/eng/2015/10/13/inspect-extract-contents-rpm-packages/.

2
12.10.2016, 15:52
2 ответа
awk 'NR==FNR {pats[$1]++; next} $1 in pats {$2=$2"+"} 1' pats inp
11 hello+
22 wonderful
33 beach
44 today+
55 is+
66 great

Для проверки совпадения в любом месте каждой строки inp, вы можете использовать аналогичный подход, но извлекая часть для сравнения с помощью match

awk 'NR==FNR {pats[$1]++; next} match($0,/[0-9]+/) && substr($0,RSTART,RLENGTH) in pats {$0=$0"+"} 1' pats inp2
11 hello+
wonderful22
beach 33 front
to44day+
is55+
gr 66 eat

(Если вы хотите сравнить с произвольными шаблонами из файла pats, то потребуется другой подход, например, перебор элементов массива pats в явном виде)

.
2
27.01.2020, 21:59

синтаксис bash:

sed -f <(printf 's/^%d\>.*/&+/\n' $(<pats)) inp

Часть внутри части <() печатает программу sed для преобразования соответствующих строк:

$ printf 's/^%d\>.*/&+/\n' $(<pats)
s/^11\>.*/&+/
s/^44\>.*/&+/
s/^55\>.*/&+/

Синтаксис <() - это подстановка процесса bash, так что вы можете взять вывод команды и работать с ним, как с файлом. Затем у нас есть sed -f sed_program inp для фактического преобразования файла

2
27.01.2020, 21:59

Теги

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