2016-09-28 4 views
0

Я пытаюсь соответствовать шаблону, используя Gawk для следующего выражения:поглазеть регулярное выражение для шаблона

static char *nm = "This is a test with many characters like [email protected]#^&"; 

картина выглядит следующим образом:

1. Line starts with static 
2. 0 or more number of characters including whitespaces 
3. char 
4. 0 or more number of characters including whitespaces 
5. = 
6. 0 or more number of characters including whitespaces 
7. " 
8. 0 or more number of characters including whitespaces 
9. " 
10. 0 or more number of characters including whitespaces 
11. ; 

Я пытаюсь с gawk /^static.*char.*=.*\",*\";"/{print} I я пытаюсь вставить строку, содержащую «bbbbb», после первого совпадающего шаблона, как показано ниже:

gawk '1; $1==nm1 && ++a==1 {print nm2}' nm1="^static.*char.*=.*\",*\";" nm2="bbbbb" "aa" 

Если есть другое возникновение статического char * nm = "Это тест со многими символами, такими как $ @ #^&"; это останется как есть.

Пожалуйста, помогите.

+0

Что такое '' & для.? Также у вас есть ', *' вместо '. *' Рядом с кавычками, также у вас есть дополнительная цитата в конце. Попробуйте 'gawk '/^static.*char. * =. *". * ". *;/{Print}'' – 123

+0

Попробуйте: '/^static.*char.*=.*"[^"]*" ;/{print} ' – anubhava

+0

@anubhava отредактировал мои Qs с требованием вставить шаблон после сопоставленного шаблона –

ответ

1

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

Вы можете использовать эту команду AWK:

awk -v nm2="bbbbb" '1; !p && /^static.*char.*=.*"[^"]*";/{p++; print nm2}' file 

Если вы хотите передать регулярное выражение, используя аргументы, то используйте:

awk -v nm2="bbbbb" -v nm1='^static.*char.*=.*"[^"]*";' '1; !p && $0 ~ nm1{p++; print nm2}' file 
+0

Однако, если я хочу поместить bbbb только после первого появления статического char * nm =" Это тест со многими символами например $ @ #^& "; а не какой-либо другой, тогда? –

+1

В этом случае используйте:' awk -v nm2 = "bbbbb" -v nm1 = '^ static. * char. * =. * "[^"] * ";» «1; ! p && $ 0 ~ nm1 {p ++; print nm2} 'file' – anubhava

+0

да, большое спасибо –

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

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