Стандартная утилита Unix/Linux для проверки каждой входной строки

Стандартная утилита Unix/Linux для проверки каждой входной строки

Я пишу Bash-скрипт, который должен проверять, соответствует ли каждая строка во входных данных определенному условию.

Есть ли способ взять предикат и сократить всю строку до 0 или 1, чтобы мне не пришлось писать код цикла самостоятельно, используя утилиту, которая является стандартной или легкодоступной в дистрибутивах Linux?

решение1

Пример данных (нам нужны все строки, содержащие "хотеть"):

$ cat x
not this
want this
not that
want that

Вы могли бы использоватьawk:

  • Вывести a 1, если строка соответствует регулярному выражению/want/
  • Вывести a 0, если строка не совпадает
$ cat x | awk '{if(match($0,/want/)){print 1}else{print 0}}'
0
1
0
1

Или попробуйтеsed:

  • Заменить строки, содержащие только 1на 0(иначе они будут переданы как 1)
  • Заменить строки, содержащие "хотеть1
  • Заменить строки, которые не являются а, 1на а0
$ cat x | sed -re 's/^1$/0/' -e 's/^.*want.*$/1/' -e 's/^[^1][^$].*$/0/'
0
1
0
1

Связанный контент