Как выполнить поиск произвольной строки, содержащей специальные символы - PullRequest
0 голосов
/ 20 декабря 2018

Мне бы хотелось, чтобы работало следующее:

line='"e[?20"'; echo 'foo - "e[?20"' | grep "^.* - $line$"

Пока у меня нет причудливых персонажей, все в порядке:

line='"bar"'; echo 'foo - "bar"' | grep  "^.* - $line$"

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Попробуйте убрать свой [ символ в своей строке.

line='"e\[?20"'; echo 'foo - "e[?20"' | grep "^.* - $line$"
0 голосов
/ 20 декабря 2018

Если все, что у вас есть, это стандартные инструменты UNIX, то вы можете выполнить сравнение буквенных строк и проверку местоположения строк в awk следующим образом:

$ line='"e[?20"'; echo 'foo - "e[?20"' |
    awk 'BEGIN{str=" - "ARGV[1]; ARGV[1]=""; lgth=length(str)}
        (s=index($0,str)) && ((s+lgth-1)==length())' "$line"
foo - "e[?20"
0 голосов
/ 20 декабря 2018

Вы можете использовать PCRE \Qliteral blocks\E:

line='"e[?20"'; echo 'foo - "e[?20"' | grep -P "^.* - \Q$line\E$"

Каждый символ, который появляется после \Q и до следующего \E, будет пониматься как буквальный символ, а не как метасимвол, который он может представлять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...