Чтобы найти слово перед поиском по шаблону

Обновите репозитории apt, чтобы использовать stretch вместо jessie (это можно сделать вручную с помощью текстового редактора, но sed можно использовать для автоматического обновления файла).

[user@debian-9 ~]$ sudo sed -i 's/jessie/stretch/g' /etc/apt/sources.list

Обратите внимание на : Debian 9 (Stretch) помечено как тестирование по какой-то причине. Вы можете заметить проблемы со стабильностью при его использовании.

1
23.12.2016, 01:18
2 ответа

Вместо этого вы можете использовать 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
4
27.01.2020, 23:13

Эту проблему можно решить с помощью расширения 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 
3
27.01.2020, 23:13

Теги

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