2017-02-08 4 views
0

Я пытаюсь выполнить следующую командуЦитирование Баш скрипт

echo `grep -o "<\/div><div class\=\".*" $1` | 
grep -o "title=\\"\(.*\?\)\\" aria-describedby" -> title.txt 

из сценария test.sh.

Однако каждый раз, когда я проверяю свой файл title.txt, он пуст.

Я проверил первую часть команды,

echo `grep -o "<\/div><div class\=\".*" $1` 

и она отлично работает.

Вторая часть является один с проблемой»

grep -o "title=\\\"\(.*\?\)\\\" aria-describedby" -> title.txt 

Просто, чтобы иметь в виду, что это не запускается с самого терминала, а из файла Баш скрипт вызывается из терминала.

Я считаю, что моя проблема заключается в том, как я цитирую или побега котировки

+1

'->' ?? Это не правильный синтаксис. Пожалуйста, используйте http://shellcheck.net, прежде чем отправлять больше вопросов здесь, в StackOverflow. Удачи. – shellter

+0

Отличный инструмент. – Andy

+1

'->' - это то же самое, что и '->' и, кажется, корректно (если избыточно) используется для поиска grep stdin и перенаправления на файл. –

ответ

0

Я не знаю, если ваши выражения делать то, что вы хотите их сделать, но есть проблема с этим один:.

"title=\\"\(.*\?\)\\" 

Когда оболочка увидит последовательную обратную косую черту (в основном, обратную косую черту), она будет читать их как один буквальный обратный слэш. Первые двойные обратные косые черты в вашем выражении читаются следующим образом, а следующая двойная кавычка заканчивает строку. Другими слова, следующая строка:

"title=\\" 

А остальные линии:

\(.*\?\)\\" 

заканчивается кавычками (не избежали еще раз из-за двойные обратные косые черты, которые становятся одним буквальных обратная косая черта), но не имеет начальной двойной кавычки.

+0

Правильно да, я думаю, что это оригинальная проблема, в этом случае, как я могу исправить это Фред? – Andy

+0

@ Andy Так как я не знаю, чего вы пытаетесь достичь, и каковы ваши исходные данные, трудно дать указания. Ваше выражение недействительно, но даже если я рекомендую его использовать, это не значит, что он находит то, что вы ищете. – Fred

+0

Понял, спасибо, Фред. Я решил проблему. Я все равно попытаюсь улучшить сценарий. Моя цель - извлечь заголовок всех видеороликов, указанных в следующем URL-адресе «www.youtube.com/index». – Andy

Смежные вопросы