Grep строка в файле, содержащем двоеточие - PullRequest
0 голосов
/ 28 октября 2019

У меня есть следующая строка в многострочном файле

.....<other lines>
-classpath "${ROOT}/abcjars/*:${ROOT}/lib/*" \
.....<otherlines>

Я хочу проверить, присутствует ли в файле строка classpath или нет

Если я пытаюсь выполнить команду grep, она работает правильно,

grep '\-classpath \"${ROOT}/abcjars/*' $File

Но если я добавлю двоеточие (:) в шаблон поиска, это не сработает

grep '\-classpath \"${ROOT}/abcjars/*:' $File

Я хочу выполнить grep и проверить, присутствует ли вся строка или нет. Возможно ли это?

Спасибо

Ответы [ 2 ]

2 голосов
/ 28 октября 2019

В регулярном выражении * имеет специальное значение, оно означает совпадение с предыдущим символом ноль или более раз. Но в вашем файле у вас нет : сразу после последовательности / (потому что между ними *), поэтому он не совпадает.

Вы не выполняете никаких шаблонов регулярных выраженийсоответствие, поэтому вы должны использовать опцию -F, чтобы указать, что это фиксированная строка.

grep -F -e '-classpath "${ROOT}/abcjars/*:' $File

Опция -e необходима, чтобы разрешить строку поиска, которая начинается с -, в противном случаестрока поиска рассматривается как опция.

1 голос
/ 28 октября 2019

Используйте экранирующий символ

grep '\-classpath \"${ROOT}/abcjars/\*:' $File

Если проблема не исчезла, попробуйте использовать флаг grep regexp

...