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

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

1 ответ1

-1

Пример данных (мы хотим, чтобы все строки, которые содержат « хочу »):

$ cat x
not this
want this
not that
want that

Вы можете использовать awk:

  • Выведите 1 если строка соответствует регулярному выражению /want/
  • Выведите 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .