Заменить строку в нескольких файлах (одна и та же папка) условием

yum update openssl problema, recibí este siguiente error al intentar actualizar openssl.

Loaded plugins: product-id, refresh-packagekit, rhnplugin, security, subscription-manager
There was an error communicating with RHN.
RHN Satellite or RHN Classic support will be disabled.
Error communicating with server. The message was:

Error Class Code: 6001
Error Class Info:
RHN is in the process of being decommissioned and systems are no longer able to receive updates or make use of any RHN services.
Please see https://access.redhat.com/articles/2979901 for more info.

Setting up Update Process
Could not retrieve mirrorlist https://mirrors.iuscommunity.org/mirrorlist?repo=ius-el6&arch=x86_64&protocol=http error was
14: Peer cert cannot be verified or peer cert invalid
Error: Cannot retrieve repository metadata (repomd.xml) for repository: ius. Please verify its path and try again.

Después de algunos RND obtuve la solución para el código de error 6001. Aquí está el resumen, que resolvió ese problema:

mv /etc/yum.repos.d/* /tmp/
rm -rf /var/cache/yum/*
yum clean all
yum repolist
yum update openssl
yum list installed openssl
1
24.05.2019, 22:35
4 ответа

Это должно сработать:

sed -i 's/^Code: 0$/Code: 1/' $(grep -l '^Number: [23]' File*)
  • часть sedвыполняет фактические замены
  • в части grep -l... File*перечислены все файлы с именем, совпадающим с «Файл *» и имеющими строку, начинающуюся с Number: 2илиNumber: 3
  • конструкция $(...), окружающая команду grep, является подстановкой команды , которая будет передавать файлы, перечисленные grep, вsed
2
27.01.2020, 23:22

С инструментами GNU:

grep -lxZ 'Number: [23]..'./File* |
  xargs -r0 sed -i 's/^Code: 0$/Code: 1/'
1
27.01.2020, 23:22

Не используйте sed для этой задачи без создания временных файлов, поскольку перенаправление обратно к источнику уничтожит содержимое файла. Вместо этого используйте редактор ed .
Я предполагаю, что имена файлов находятся в диапазоне [a -zA -Z0 -9 _-]

% cat scr.ed
1,$s/Code: 0/Code: 1/
w
q
% cat scr.sh
#!/bin/sh
for file in `grep -l '^Number: [23]' File*`
do
    ed -s $file <scr.ed
done

% chmod 755 scr.sh
%./scr.sh
0
27.01.2020, 23:22

Предполагая, что число всегда предшествует коду , а код может иметь любое значение, затем с помощьюsed:

sed -i '/^Number: [23]/{n;s/^Code:.*$/Code 1/}' File*

Если содержание согласовано, так что строка после Номер всегда является Кодом 0 , это можно упростить до:

sed -i '/^Number: [23]/{n;s/0/1/}' File*
0
27.01.2020, 23:22

Теги

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