
Я пишу 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