2014-01-07 4 views
0

Я хочу найти вхождения строки Execution has sterted из набора файлов,
сказать три файла, присутствующих в каталоге /home/abc/output/.Как фиксировать определенную строку в файле

Для этого, я в настоящее время с помощью следующей команды:

grep "Execution has sterted" /home/abc/output/* 

Он выводит:

/home/abc/output/file1:line containing "Execution has sterted" 

/home/abc/output/file1~:line containing "Execution has sterted" 

/home/abc/output/file2:line containing "Execution has sterted" 

/home/abc/output/file2~:line containing "Execution has sterted 

/home/abc/output/file3:line containing "Execution has sterted" 

/home/abc/output/file3~:line containing "Execution has sterted" 

Даже хотя 3 файлов есть, вывод состоит из 6 линий, с оригинальным путем (ы) и другие пути (пути), заканчивающиеся на ~, как показано выше.

Я хочу, чтобы он показывал вхождения исходного пути (путей), а не ~.
Как достичь этого?

Thanks All,

Это работает для меня.

Мой фактический запрос заключается в том, что через работу по заданию кроны задание будет выполняться и будет указывать на 3 файла журнала. Каждый файл журнала будет состоять из утверждений, из которых мне нужно запятнать 2 утверждения: grep «Execution has steded» и «Execution успешно завершена ». Как только я получу выше двух утверждений, тогда только я могу подтвердить, что работа выполнена успешно. (Потому что некоторое время работа застряла в определенной точке)

как это можно сделать с помощью скриптов? я должен получить сообщение, как работа завершена или задания не удалось

+0

Что такое вывод 'ls'?Я склонен думать, что вы скопировали свои файлы в какой-то момент, и эти '' 'файлы действительно существуют. Нет никакой причины, по которой 'grep' писал бы'/home/abc/output/file1 ~ ', если бы такой файл не существовал. – dimo414

ответ

2
grep --exclude="*~" "search string" /path/* 
+0

Привет, Как захватить 2 строки из того же файла журнала. Для ex моя первая строка «Job is started», а вторая строка «Job completed successfully» – user3164140

3

файлы, заканчивающиеся ~ обычно подпорки сделаны текстовые редакторы, когда они сохраняют файлы.
Самое простое решение - удалите их сперва делая rm /home/abc/output/*~.


Если вы хотите сохранить их, вы можете вместо того, чтобы передать --exclude= возможность Grep.
Это позволит исключить файлы, соответствующие данному шаблону шара.

Например, в вашем случае:

grep --exclude="*~" "Execution has sterted" /home/abc/output/*

Файлы сопоставления *~ будут исключены.
(не забудьте заключить шаблон в кавычки, она будет передана непосредственно Grep)

+0

Привет, Как захватить 2 строки из одного файла журнала. Для ex моя первая строка - «Job is started», а вторая строка - «Успешно завершена» – user3164140

+0

Вам нужно будет запустить две отдельные команды grep или использовать выражение поиска, например '(Задание начато) | (Успешно завершено) '. –

1

Чтобы предотвратить grep видеть файлы резервных копий в первую очередь (устраняет необходимость --exclude), используйте шаблон, который опускает их.

grep "Execution has sterted" /home/abc/output/*[!~] 

*[^~] также должен работать; POSIX (по причинам, о которых я не знаю) заменяет ^, используемый в регулярных выражениях как символ отрицания, но bash поддерживает оба.

+0

Привет эксперты, как это может быть достигнуто в окнах, т. Е. Захват строки perticulare означает, что «задание выполнено успешно» в текстовых файлах (скажем, 4), сохраненных в перкулярном пути, скажем c: \ CBA \ TEST – user3164140

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