Убедиться, что путь к файлу указан в grep - PullRequest
0 голосов
/ 27 сентября 2011

Мне пришлось изменить путь к моей папке с шаблонами, и я хочу убедиться, что все мои файлы ссылаются на "templates / app / xxx.html" вместо "templates / xxx.html"

Как можноЯ использую grep, чтобы увидеть все строки "* .html", но не "app / *. Html"?

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

Предполагая, что в каждой строке только один, вы можете начать с чего-то вроде:

grep '\.html' | grep -v '/app/.*\.html'

Первый доставит все те, которые имеют .html.Второй удалит из этого списка все те, которые имеют вариант app, оставляя только те, которые нарушают ваш чек.

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

Например (например, как Кентпредлагает), вы можете убедиться, что все HTML-файлы напрямую в каталогах app, а не, возможно, app/something/xyzzy.html.В этом случае вы можете просто настроить второй фильтр, чтобы обеспечить следующее:

grep '\.html' | grep -v '/app/[^/]*\.html'

Используя [^/]* (любое количество не / символов) вместо .* (любое количество символов,в том числе /) останется в тех, у которых нет HTML-файла непосредственно в каталоге app.

0 голосов
/ 27 сентября 2011

или используйте это grep -P '(?<!/app)/[^/]*\.html

тест:

kent$  echo ".../app/a/b/x.html
.../foo/myapp/y.html
.../foo/app/z.html"|grep -P '(?<!/app)/[^/]*\.html'

.../app/a/b/x.html
.../foo/myapp/y.html

обратите внимание, что это будет игнорировать ..../app/*.html, но .../myapp/*.html или .../app/foo/x.html будут совпадать.

0 голосов
/ 27 сентября 2011

Также может быть полезно узнать, какие файлы содержат нежелательные ссылки на старый путь.

Я бы сделал что-то вроде этого (отказ от ответственности: не проверял! Но я скопировал некоторые из них из paxdiablo, так что эта часть, вероятно, правильно.)

find /path/to/files_to_check -type f -name "*.html" -exec grep '\.html' {} \; /dev/null | grep -v '/app/.*\.html'

Команда find ищет в иерархии каталогов обычные файлы с именами, заканчивающимися на .html. Отрегулируйте по мере необходимости для вашей ситуации.

Для каждого из этих файлов grep запускается с двумя аргументами файла: {}, представляющий целевой путь, и /dev/null, чтобы получить grep, чтобы поставить префикс соответствующей строки с именем файла, в котором оно произошло. Удаляем все, что соответствует '/app/.*\.html'. Остается список строк, которые необходимо исправить, а также имена файлов, в которых они были найдены.

...