grep не берет шаблон из файла - PullRequest
3 голосов
/ 14 января 2012

У меня есть файл шаблона, скажем t.txt , содержащий следующее:

vali

и файл, с которым я хочу запустить grep, скажем, a , содержащий следующее:

validate
validate:

bw_validate:
 [echo] Validating project: CrossService_v1_59_5_1
 [echo] Found 62 errors and 28 warnings
 [echo] -----------------------------------------------------------------
 [echo] Validating project: CRM-UDB_59_4_2
 [echo] Found 25 errors and 28 warnings
 [echo] -----------------------------------------------------------------
 [echo] Validation Failed: At least one project contains errors.

notify:

BUILD FAILED
bw.xml:311: Validation Failed: At least one project contains errors.

, если я выполню:

grep -iE vali a

Я получу ожидаемый вывод, то есть:

validate
validate:
bw_validate:
 [echo] Validating project: CrossService_v1_59_5_1
 [echo] Validating project: CRM-UDB_59_4_2
 [echo] Validation Failed: At least one project contains errors.
bw.xml:311: Validation Failed: At least one project contains errors.

, но если я выполню:

grep -iE -f t.txt a

У меня нет совпадений.Файлы доступны для чтения и находятся в одном каталоге (из которого я выполняю команду).Я пробовал оба с -f и --file = t.txt, --file = 't.txt', --file = "t.txt"

Я нахожусь на Linux Fedora 16 64bit.Как ни странно, эта же команда работает правильно в Windows с портированием grep / egrep.

Я что-то упустил?Любая помощь приветствуется, так как это вызывает у меня головную боль :( спасибо!

Ответы [ 2 ]

4 голосов
/ 14 января 2012

Должно работать правильно (у меня работает).Переключатель -f указан в POSIX.

Тот факт, что вы говорите, что он работает в Windows, дал мне идею: может ли файл t.txt заканчиваться переводом строки в DOS?Я попробовал это с чистым файлом (без новой строки), и это сработало.Затем я попытался сделать это с файлом DOS и смог воспроизвести ваши результаты.

Попробуйте dos2unix "исправить" файлы DOS.

1 голос
/ 15 января 2012

Если у вас нет утилиты dos2unix, вы можете выполнить любое из следующих действий, чтобы преобразовать символы новой строки DOS или Windows в символы новой строки Unix.все строки заканчиваются на CR+LF (возврат каретки + перевод строки)

sed -i 's/.$//' filename

Обычно вы можете ввести контрольный символ ^M буквально в командной строке, сначала нажав Ctrl-v(клавиша управления + клавиша v), а затем Ctrl-m. sed -i 's / ^ M $ //' filename

Этот следующий однострочный предполагает, что мы используем GNU sed .Шестнадцатеричное значение для CR равно 0x0D.

sed -i 's/\x0D$//' filename
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...