У меня есть пользовательский ввод, который будет использоваться в строке поиска, которая может содержать метасимволОбработка метасимволов в строках поиска
Для получения, например, C# или C++
моя команда Grep в функции была:
grep -E "$1|$2" test.txt
под прямой замены:
grep -E "C\+\+|testWord" test.txt
grep -E "C\#|testWord" test.txt
первым поймал линии хорошо, но не второй. Странно, # был полностью проигнорирован. без прямой замены, как поймать что-нибудь с с последующим testWord вместо C++ и C# соответственно
Я попытался его обработки с использованием СЭД
$temp = `echo $1 | sed 's/[\#\!\&\;\`\"\'\|\*\?\~\<\>\^\(\)\[\]\{\}\$\+\\]/\\&/g'`
, но он не работает правильно. Или есть ли другой способ обработки ввода пользователем с помощью метасимволов?
Заранее спасибо
Как вы получаете вход пользователя? Как аргументы командной строки или с помощью команды 'read'? –
Интересно. Используя ваши новые примеры, C++ - это тот, который дает мне проблемы, когда это похоже на C#, что для вас проблематично. Я обнаружил, что использование ** обоих ** котировок и обратных косых черт помогло: 'grep -E" C \ + \ + "', как и с использованием регулярного grep с экранированным контуром, не избегая плюсов: 'grep 'C++ \ | C#" ' –
Что касается вашего примера sed, обычно вы не хотите, чтобы знак доллара указывал на имя переменной в левой части задания (если вы не делаете косвенное действие). –