2012-04-04 4 views
0

Я несколько раз пытался получить grep или sed, чтобы сделать то, что я хочу, и до сих пор не удалось, поэтому, если кто-нибудь может помочь, я был бы очень благодарен!найти строки, которые являются alnum и могут содержать _ или #

У меня есть текстовый файл, который заполнен строк строк, которые я вытащил из дампа памяти, используя sysinternals strings.exe. теперь мне нужно фильтровать этот файл вплоть до отдельных строк, как много это бесполезно мусор (например: & 644 * /; @) или несколько строк прикрепленная на одной строке, например:

&644*/;@ 
string1 
string2;@%string3*£""^string4 

Струны мне нужно может состоять из буквенно-цифровых символов, подчеркиваний (_) и хешей (#), поэтому string_string # 1 или examplestring или example_string.

Таким образом, используя приведенный выше пример, мне нужно иметь возможность фильтровать string1, string2, string3 и string4.

ответ

1

Это не совсем ясно, что вы хотите, но, возможно, вы просто ищете:

< path-to-text-file tr \; '\012' | tr -d -c 'A-Za-z0-9_#' 

Это удалит все символы, которые вы не хотите, и преобразовать точку с запятой в символ новой строки.

Или, возможно, вы просто хотите

< path-to-text-file tr -sc 'a-zA-Z0-9_#' '\012' 

, который преобразует каждую последовательность смежных символов, которые вы хотите игнорировать с одной строки.

+0

Спасибо! второй делает именно то, что я хотел. – Twisted89

0

Вы можете использовать СЭД:

sed 's/[^[:alnum:]_#]\+/\n/g' dump > strings 

или инлайн, если ваш СЭД поддерживает его:

sed -i 's/[^[:alnum:]_#]\+/\n/g' dump 
0

Так как вы хотите, чтобы исключить "644" (который представляет собой буквенно-цифровую строку), я d suggest

grep -o '[[:alpha:]][[:alnum:]_#]*'