Search String & RUM в одной команде awk

Поскольку вы установили Debian 8.1, ваши источники пакетов должны ссылаться на jessie, а не на squeeze. Вам следует отредактировать /etc/apt/sources.list (и файлы в /etc/apt/sources.list.d/, ссылающиеся на squeeze) и заменить squeeze на jessie.

После этого

apt-get update
apt-get -f install
apt-get install build-essential

следует восстановить g++ (build-essential зависит от g++ и make).

0
25.01.2019, 08:29
2 ответа

Используйте для этого GNU grep:

$ grep -o -P '(?<=\bxyz=)[^,]+,' abc.txt 

grepвыводит строки, соответствующие заданному регулярному выражению. С помощью -oмы определяем печать только совпадающей части строки. С -Pнаше регулярное выражение интерпретируется как регулярное выражение perl, что дает нам больше возможностей.

Наше регулярное выражение говорит:

  • найти еще один символ, который не является,([^,]+)и заканчивается на,
  • эти последовательные символы должны следовать послеxyz=(?<=\bxyz=)это называется положительным просмотром назад). С помощью \bмы удостоверяемся, что grep не похож наbooxyz=
1
28.01.2020, 02:41

Используя стандарт awkи предполагая, что вы хотите искать xyz=, а именно во втором поле, разделенном запятой -.

$ awk -F ',' '{ split($2,a,"="); if (a[1] == " xyz") print a[2] }' file
a432j42jjk4
jkl234j54nn
2395hdshkw4
abc424729hh
70700ghgh99

Как вариант,

$ awk -F ',' '{ split($2,a,"=") } a[1] == " xyz" { print a[2] }' file
a432j42jjk4
jkl234j54nn
2395hdshkw4
abc424729hh
70700ghgh99

Это будет обрабатывать ввод как состоящий из строк с полями, разделенными запятыми -. Фактическое тело кода awkразделит второе поле с разделителями-запятыми -на подполя в =, а затем напечатает второе из них, если первое представляет собой точно строку xyz(, включая начальный пробел перед запятая ).

Пустые строки будут отбрасываться, так как a[1]не получит нужное значение в этих строках.

Если вам нужны дополнительные запятые в конце каждой строки вывода, используйте print a[2] ",".

0
28.01.2020, 02:41

Теги

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