grep? no.

Jun. 11th, 2003 01:18 pm
109: (Default)
[personal profile] 109
имеется много файлов, находимых по паттерну, в которых нужно найти строки, содержащие подстроку А и расположенные между строками, содержащими подстроки B и С. ответ должен обязательно содержать file name + line number, копия строки тоже желательна. какой тул поможет мне это сделать с минимальным геморроем?

(no subject)

Date: 2003-06-11 11:22 am (UTC)
From: [identity profile] caseq.livejournal.com

find -name pattern |
    xargs awk '/B/,/C/ { if ($0 ~ /A/) printf "%s(%d): %s\n",FILENAME,NR,$0; }'


(no subject)

Date: 2003-06-11 11:43 am (UTC)
From: [identity profile] 109.livejournal.com
так, уже что-то ближе к истине. только find не берёт файлы в поддиректориях, а grep -l добавляет в конец имени файла какое-то дурацкое двоеточие.

зы. а под sed слабо скрипт модифицировать? а то я sed уже поставил, а авк ещё нет :-)

(no subject)

Date: 2003-06-11 11:58 am (UTC)
From: [identity profile] caseq.livejournal.com
Если у тебя find не ходит в подкаталоги, у тебя, видать, какой-то левый неправильный find. unix'овый ходит. В принципе, ты можешь заменить его на dir /b /s | grep. Что же до awk'а, поставь уже себе cygnus и живи счастливо ;) sed'ом будет сложновато вставить имя файла и строчку.
From: [identity profile] msh.livejournal.com
C:\>find /?
Searches for a text string in a file or files.

FIND [/V] [/C] [/N] [/I] "string" [[drive:][path]filename[ ...]]

/V Displays all lines NOT containing the specified string.
/C Displays only the count of lines containing the string.
/N Displays line numbers with the displayed lines.
/I Ignores the case of characters when searching for the string.
"string" Specifies the text string to find.
[drive:][path]filename
Specifies a file or files to search.

If a path is not specified, FIND searches the text typed at the prompt
or piped from another command.
From: [identity profile] caseq.livejournal.com
Миша, ну зачем передергивать?! Ясно же, что первый шаг после установки NT, необходимый для превращения ее в систему, под которой удобно работать -- это не голую бабу на десктоп вешать, а поставить Cygwin и утащить его в путях вперед system32.
From: [identity profile] 109.livejournal.com
я поставил UnxUtils, они вроде без цыгвина работают. или там не всё нужное есть?

(no subject)

Date: 2003-06-11 12:37 pm (UTC)
From: [identity profile] 109.livejournal.com
C:\Dev\Thresher\Client>grep -l -d -o Debugger *.pas | xargs gawk "/except/,/end/ { if ($0 ~ /Debugger/) printf "d): s\n",FI
LENAME,NR,$0; }"

gawk: cmd. line:2: fatal: cannot open file `{' for reading (No such file or directory)

если внешние кавычки сделать одинарными, как ты написал, то он на них ругается, говорит, что illegal character.

(no subject)

Date: 2003-06-11 01:12 pm (UTC)
From: [identity profile] 109.livejournal.com
похоже, что дело портит xargs, потому что когда я ему скармливаю < filename, то всё работает.

(no subject)

Date: 2003-06-12 02:56 am (UTC)
From: [identity profile] caseq.livejournal.com
А :) Я все понял. Твоя ошибка в том, что ты думаешь что find должен искать строчки в файле. На самом деле, правильный find должен искать сами файлы, и выдавать в stdout их список. Поэтому он не взаимозаменяем с grep'ом для начала. Убедись что у тебя твои unix utild стоят в путях до винюковых каталогов, где лежит неправильный find. А, собственно, работа xargs состоит в том, чтобы список файлов из stdin положить в командную строчку.
Что до кавычек, то да, cmd не понимает апострофов (уроды). Можно написать и просто кавычки, но тогда могут быть осложнения с кавычками внутри. Надеюсь, ты их там сам победишь :)

(no subject)

Date: 2003-06-12 05:58 am (UTC)
From: [identity profile] 109.livejournal.com
huh? какой find? я же написал двумя постами выше, какой скрипт получился у меня из твоего. grep -l -d -o как раз и выдаёт в stdout список файлов.

кавычки я тоже победил (см. "с '< filename' всё работает")

спасибо anyway!

Profile

109: (Default)
109

March 2019

S M T W T F S
     12
3456789
101112131415 16
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags