Проверка файла содержит строку, начинающуюся с «xxx», но не «yxxx» - PullRequest
1 голос
/ 01 февраля 2012

Я пишу небольшой скрипт bash, который проверяет, выполнять ли makeindex или нет, если файл .tex содержит строку \makeindex.Запуск MakeIndex не будет выполняться, если команда закомментирована.

Как проверить, что в файле, скажем, source.tex есть строка?

Я знаю, что мне нужен grep - однако я довольно плохо знаком с регулярными выражениями и сценариями bash.

Ответы [ 3 ]

2 голосов
/ 01 февраля 2012

Кажется, ваш заголовок и вопрос задают разные вещи.Поскольку пара людей уже ответила на ваш заголовок, я отвечу на ваш вопрос.

Насколько я помню, текстовые комментарии %.Поэтому мы будем искать строку, содержащую \makeindex без % перед ней в строке:

grep '^[^%]*\\makeindex' source.tex
#grep -- the program we're running, obviously.
#    '                 ' -- Single quotes to keep bash from interpreting special chars.
#     ^ -- match the beginning of a line
#      [  ] -- match characters in the braces.
#       ^  -- make that characters not in the braces.
#        % -- percent symbol, the character (in the braces) we do not want to match.
#          * -- match zero or more of the previous item (non-percent-symbols)
#           \\ -- a backslash; a single one is used to escape strings like '\n'.
#             makeindex -- the literal string "makeindex"
#                        source.tex-- Input file

Пример:

$ grep '\\end' file.tex
51:src/file.h\end{DoxyCompactItemize}
52:%src/file.h\end{DoxyCompactItemize}
53:src/%file.h\end{DoxyCompactItemize}
54:    %\end{DoxyCompactItemize}
55:src/file.h\end{DoxyCompactItemize}%
$ grep '^[^%]*\\end' file.tex
51:src/file.h\end{DoxyCompactItemize}
55:src/file.h\end{DoxyCompactItemize}%
$
2 голосов
/ 01 февраля 2012

Если вы хотите привязать совпадение к началу строки, это

grep ^xxx files...
0 голосов
/ 01 февраля 2012

Вы можете сделать это одним вызовом awk:

#!/bin/bash
if awk '/^xxx/{f=1}/^yyy/{f=0}END{if(!f)exit 1}' file; then
  echo "file OK"
else
  echo "file BAD"
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...