2013-08-06 7 views
1

Я хочу извлечь содержимое после соответствующего шаблона из файла.извлечение содержимого после сопоставления с образцом в linux

$ cat test 
setenv se_boot_opt heap=0x100000 node_type=IB 
namedalloc GWUP_FEATURE_MEMORY_BLOCK 0x480000000 0x16093A000 
namedprint 
setenv se_boot_opt2 heap=0x256000 node_type=AB 

Мне нужно обработать входной файл по строкам. Для каждой строки необходимо проверить следующее.

  1. Если строка начинается с setenv слова, то он должен пропустить первые 2 слова и печати/вывода оставшегося контента в этой строке.

  2. Если линия начинается с namedalloc, тогда она должна заменить на слово uboot_namedalloc.

Я хочу иметь только нижние строки на моем выходе.

heap=0x100000 node_type=IB 
uboot_namedalloc GWUP_FEATURE_MEMORY_BLOCK 0x480000000 0x16093A000 
namedprint 
heap=0x256000 node_type=AB 
+1

После сопоставления с каким шаблоном? Описание того, что вы хотите сопоставить, помогает устранить ложные срабатывания. –

ответ

0

Этот awk скрипт будет делать трюк:

$ awk '$1=="setenv"{$1=$2="";sub(/ */,"")}$1=="namedalloc"{$1="uboot_"$1}1' file 
heap=0x100000 node_type=IB 
uboot_namedalloc GWUP_FEATURE_MEMORY_BLOCK 0x480000000 0x16093A000 
namedprint 
heap=0x256000 node_type=AB 
+0

Я обновил свой ответ, чтобы соответствовать вашей новой спецификации. В будущем, пожалуйста, задайте вопрос, который вы хотите задать, потому что это нечестно для пользователей, если вы измените свой вопрос, чтобы аннулировать существующие ответы. Пожалуйста, прочитайте раздел [** help **] (http://stackoverflow.com/help), особенно по вопросам запроса и форматирования. Если это решение решит вашу проблему, тогда вы должны принять этот ответ (или другие ответы, если будет лучше), щелкнув галочку рядом с ним. –

+0

спасибо тонну. я буду следить за предложением ur ... – user2656141

1

дают Grep попробовать:

grep -o 'heap=.*' 

exmaple

kent$ echo "setenv se_boot_opt1 heap=0x100000 node_type=IB 
namedprint 
setenv se_boot_opt2 heap=0x256000 node_type=AB"|grep -o 'heap=.*' 
heap=0x100000 node_type=IB 
heap=0x256000 node_type=AB 
+0

Вы используете только BRE, поэтому я бы бросил '-P', особенно если он ограничивает вас GNU grep. –

+0

@sudo_O Вы правы, я подумывал оглянуться, когда я набрал его, но это было необязательно. thx – Kent

1
grep -o 'heap=[^ ]* node_type=[^ ]*' test 
heap=0x100000 node_type=IB 
heap=0x256000 node_type=AB 
0

perl метод.

echo 'setenv se_boot_opt heap=0x100000 node_type=IB 
namedalloc GWUP_FEATURE_MEMORY_BLOCK 0x480000000 0x16093A000 
namedprint 
setenv se_boot_opt2 heap=0x256000 node_type=AB' | perl -lape 'if (/^setenv/){s/(\w+\s){2}//}elsif(/^namedalloc/){s/namedalloc/uboot_namedalloc/}' 

Выход:

heap=0x100000 node_type=IB 
uboot_namedalloc GWUP_FEATURE_MEMORY_BLOCK 0x480000000 0x16093A000 
namedprint 
heap=0x256000 node_type=AB 

не так элегантно, но он работает.

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