У меня есть требование прочитать файл в строке за строкой и построить конвейерную инструкцию grep для устранения этих шаблонов с помощью флага -v, то есть у меня есть файл, скажем negativelist, который включает в себя следующие модели:Экранирование звездочек и других специальных символов в сценарии оболочки
Hello
World
Java
Таким образом, я прочитал этот файл построчно и построить водопроводное заявление Grep следующим образом, чтобы устранить эти модели из файла образца, входной_файла
Grep -v "Привет" inputfile | grep -v "Мир" | grep -v "Java"
Однако, я сталкиваюсь с проблемами при объявлении специальных символов в отрицательным. Хотя обычно я использовал grep -v '*' входной файл, чтобы удалить все строки, содержащие звездочку, я не могу заставить эту работу работать. Побег звездочек с одинарными кавычками в negativelist, похоже, не помогает. Любые мысли о том, как я должен избегать звездочки, чтобы я мог устранить строки, содержащие ее, используя мой текущий подход, окружающий любую строку, прочитанную из negativelist с двойными кавычками?
Чтобы уточнить, у меня есть следующий набор ограничений:
- Grep конвейер строка строятся с помощью скрипта в следующем виде: Grep -v «line1 из negativelist» входной_файла | Grep -v «line2 из negativelist ... и так далее
- Кроме того, этот скрипт запускает эту команду Grep и сохраняет свой вывод в другой файл.
- Я могу контролировать только то, что происходит между двойными кавычками, по определение закономерностей в negativelist. Я не могу изменить способ скрипта генерирует этот Piped заявление Grep
- Даже думал, что я получить желаемый результат, выполнив Grep «*» входной_файла из командной строки, просто хранить * в negativelist не дает желаемого результата удаления всех строк, содержащих стериск в них.
Кроме того, определение шаблона, такие как Hello. * World устранить все строки вида
Hellotest1World или
Hellotest2World
, когда это определено в negativelist Безразлично» t, похоже, работает либо, возможно, звездочка не сбрасывается правильно. Следующее утверждение в командной строке работает правильно: Grep -v «Hello World» * входной_файл , т.е. правильно устраняет все строки, содержащие Hello следует любой символ (ы) между ними следуют World
Спасибо за это предложение. Предполагая, что я не могу использовать fgrep, поскольку скрипт, который строит эти конвейерные заявления, не является чем-то, что я контролирую, есть ли у вас какие-либо другие предложения? – Rishabh
Сообщение отредактировано. Что вы контролируете? 'grep' тоже можно использовать так:' grep '\ *' ' –
Скрипт, который генерирует сжатый grep-оператор, фактически окружает каждую строку из * negativelist * двойными кавычками. Мысли о том, как я должен объявить звездочку в * negativelist * с учетом этого ограничения? – Rishabh