2012-04-23 3 views
0

Я пытаюсь написать сценарий, который вытаскивает хеши NTLM из текстового файла, который содержит около 500 000 строк данных. Не все учетные записи содержат хеши, и мне нужны только те, которые содержат хеши.Сценарий для вытаскивания хэшей из большого текстового файла

Вот пример того, что выглядит как данные:

Mango Chango А (а): $ NT $ 547e2494658ca345d3847c36cf1fsef8 :::

Есть тысячи других линий в файле , но эта конкретная строка - это то, что мне нужно извлечь из файла. Есть около 100 строк, которые относятся к этому, и я не хочу вручную просматривать весь файл, ища его.

Есть ли простой сценарий или что-то, что я могу запустить в Linux, чтобы вытаскивать строки, которые следуют за этим шаблоном из файла?

Спасибо!

+9

не выполняет «grep» эту работу? – Jasper

+0

@ChangoMango, вы должны принять ответ, который сработал для вас. – gpojd

ответ

0

В Bash и многих других оболочек:

grep ":$NT$" your_file.txt 

Котировки позволит $ перейти в шаблон недосаждают.

+3

Нет, они не будут. Вышеупомянутое будет расширять '$ NT', а затем искать все, что расширяется до конца строки. Если вы не хотите этого делать, вам нужно использовать одинарные кавычки или поставить обратную косую черту перед первым знаком доллара, и в любом случае вам нужно поставить обратную косу перед вторым знаком доллара. –

+0

Будет ли это также тянуть данные перед этим? Я бы хотел, чтобы вся строка включала имя пользователя. –

+0

> $ кошки 123.txt > Манго Чанго А (а): $ NT $ 547e2494658ca345d3847c36cf1fsef8 ::: > 123 > 321 > NT > $ NT > $ ENV NT = 123 Grep ": $ NT $" 123.txt > Mango Chango A (a): $ NT $ 547e2494658ca345d3847c36cf1fsef8 ::: > Извините, я не могу понять, как сделать разрывы строк в комментариях, так что предположим, что> blocquote ident как разрыв строки. –

4

grep '\$NT\$'имя_файл

Если бы другие вхождения $ NT $ за пределы поля, который вы ищете, вы могли бы быть более точным - это будет найти только те строки, которые имеют его во втором разделённого двоеточия разграничены поле:

awk -F: '$2 ~ /\$NT\$/'имя_файла

+0

Будет ли это также вытаскивать данные перед этим? Я бы хотел, чтобы вся строка включала имя пользователя. –

+0

Отметьте, что ваш awk отлично поработал! –

+0

Скобки не нужны. –

1

Еще одна вариация на специфичность:

grep -E ':\$NT\$[[:alnum:]]{32}:' 

Вы можете использовать диапазон, если это необходимо:

grep -E ':\$NT\$[[:alnum:]]{30,34}:' 

или быть более общим:

grep -E ':\$NT\$[[:alnum:]]+:' 

[:alnum:] именованный класс символов, который включает в себя все буквенные символы, верхние и нижние, и все числовые символы в вашей текущей локали.

Другие классы символов включают [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:] и [:xdigit:].

Я бы использовал [:xdigit:], но у него есть «s».

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

  • Нет связанных вопросов^_^