Обновите репозитории apt, чтобы использовать stretch вместо jessie (это можно сделать вручную с помощью текстового редактора, но sed можно использовать для автоматического обновления файла).
[user@debian-9 ~]$ sudo sed -i 's/jessie/stretch/g' /etc/apt/sources.list
Обратите внимание на : Debian 9 (Stretch) помечено как тестирование по какой-то причине. Вы можете заметить проблемы со стабильностью при его использовании.
Вместо этого вы можете использовать sed
... например,
$ sed -nr 's/.*( |^)([0-9]+) TrainIdentifyBusinessError.*/\2/p' file
1612
или
$ sed -nr 's/.*( |^)([0-9]+) TrainIdentifySuccess.*/\2/p'
252
или
$ sed -nr 's/.*( |^)([0-9]+) TrainIdentifyTechnicalError.*/\2/p'
3
-n
ничего не печатайте, пока мы не попросим -r
использовать ERE . *
любое количество любых символов в строке (| ^)
пробел или начало строки ([0-9] +)
одна или несколько цифр и (сохраните это)
\ 2
обратная ссылка на второй (сохраненный шаблон)
p
напечатайте отредактированную строку Запоздалые мысли ... если вам нужно делать это регулярно, вы можете создать функцию оболочки (например, добавить в файл ~ /.* rc
вашей оболочки , ~ / .bashrc
, если вы используете bash), например:
getnum() { sed -nr 's/.*( |^)([0-9]+) TrainIdentify'"$1"'.*/\2/p' "$2" ; }
Пример использования (укажите поле и имя файла в командной строке - если файл всегда один и тот же файл, вы можете указать полный путь к нему внутри функции вместо «$ 2»
):
$ getnum BusinessError file
1612
$ getnum TechnicalError file
3
$ getnum Success file
252
Эту проблему можно решить с помощью расширения Perl для grep
(флаг -P
). {{1 }} Чтобы получить 3
из TrainIdentifyTechnicalError
:
$ echo "1612 TrainIdentifyBusinessError 252 TrainIdentifySuccess 23 TrainIdentifyTechnicalError" | grep -Po "[[:digit:]]+ *(?=TrainIdentifyTechnicalError)"
23
Чтобы получить 1612
из TrainIdentifyBusinessError
$ echo "1612 TrainIdentifyBusinessError 252 TrainIdentifySuccess 23 TrainIdentifyTechnicalError" | grep -Po "[[:digit:]]+ *(?=TrainIdentifyBusinessError)"
1612