Есть ли способ трактовать специальные символы во входной переменной пользователя как литерал? - PullRequest
0 голосов
/ 12 января 2019

Узнайте больше о awk, однако я не могу найти способ трактовать специальный символ как литерал в шаблоне awk ~, например, у меня есть текстовый файл, который содержит

C++ for dummies:test1:test2
java for dummies:test1:test2
bash for dummies:test1:test2

скажем, я бы хотел, чтобы пользователь мог искать соответствующий шаблон на основе первого поля, например, при вводе пользовательских типов в макетах будет выводиться

C++ for dummies:test1:test2
java for dummies:test1:test2
bash for dummies:test1:test2

или если пользователь вводит целую строку C ++ для макетов, вывод будет

C++ for dummies:test1:test2

фактический вывод получается пустым, поскольку он содержит специальный символ

, но только ввод C ++ приводит к выводу

C++ for dummies:test1:test2 

Черная косая черта может помочь, однако это пользовательский ввод, означающий, что я понятия не имею, на что будет похож этот ввод.

это то, что я кодировал

read titleInput
awk -v title="$titleInput" -F: '$1~title {print $0}' textF.txt

1 Ответ

0 голосов
/ 12 января 2019

Вместо использования ~ для совпадения с регулярным выражением используйте функцию index, которая считает аргумент поиска простой строкой, а не RE:

$ echo 'C++ for dummies:test1:test2' | awk  -F: -v title="C++ for dummies" 'index($1, title)'
C++ for dummies:test1:test2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...