Как изменить текст рядом с текстом, который я нашел после grep?

На официальной странице написано:

Flatpak support is built into Linux Mint 18.3 and newer—no setup required!

If you are using an older version, upgrade to Linux Mint 18.3.

Думаю, здесь мне нечего добавить. Просто обновите…

Это единственный «чистый» и безопасный способ. Вы не можете оставаться на этой старой системе в любом случае, в будущем.

1
16.04.2021, 20:03
3 ответа

Предполагая, что в строке есть только один экземпляр DB_UP, я бы использовал:

sed 's/\(^.*\)\(DB_UP\)\(.*\)$/\1\3/'

Если вам нужно заменить все содержимое файла, цикл bash @berndbausch будет работать идеально:

for file in f1 f2 f3 f3 f4; do
    sed -i.bak 's/\(^.*\)\(DB_UP\)\(.*\)$/\1\3/' "$file"
done
0
28.04.2021, 22:52

Команда заменыsedss/DB_UP//заменит первый DB_UPв строке ничем (, другими словами, удалит его ).

Теперь вы хотите сделать это только для строк, начинающихся с sqlplus, поэтому используйте ^sqlplusкак условие адреса ()для команды s:/^sqlplus/s/DB_UP//. ^привязывает шаблон к началу строки.

Проверьте, поддерживает ли ваша версия sedпараметр -iдля интерактивного изменения файла, затем вы можете просмотреть файлы, которые хотите изменить, и применить скрипт

sed -i '/^sqlplus/s/DB_UP//' file1 file2 file3

Некоторые версии sedзаставляют вас давать расширение имени файла для файла резервной копии после -i. Это может быть хорошей идеей, если вы беспокоитесь о том, чтобы что-то испортить, но вам может потребоваться удалить файлы резервных копий после того, как вы убедитесь, что все в порядке.

1
10.05.2021, 10:22

Сawk:

   awk '/sqlplus\s{1,}DB_UP/{gsub(/sqlplus\s{1,}DB_UP/, "sqlplus");print; next}1' file

Эта функция gsub()заменяет DB_UP, которая следует после пробеловsqlplusи .

Это можно сократить до следующей команды:

awk '{gsub(/sqlplus  *DB_UP/, "sqlplus")}1' file
0
10.05.2021, 11:13

Теги

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