Подтвердить что ты не робот

Как использовать grep для получения чего-либо только после `name=`?

Я застрял в попытке grep что-то сразу после name=, включает только пробелы и буквенно-цифровые символы.

например:.

name=some value here

Я получаю

some value here

Im полностью newb в этом, следующий grep соответствует всем, включая name=.

grep 'name=.*' filename

Любая помощь очень ценится.

4b9b3361

Ответ 1

В качестве подробного здесь вы хотите создать положительное условие lookbehind, например:

grep -P '(?<=name=)[ A-Za-z0-9]*' filename

-P делает grep использовать диалект Perl, иначе вам, вероятно, нужно будет избежать скобок. Вы также можете отметить, как указано в другом месте, добавить параметр -o, чтобы распечатать только то, что соответствует. Часть в скобках указывает, что вы хотите буквенно-цифровые символы и пробелы.

Преимущество использования положительного предложения lookbehind в том, что текст name= не является частью совпадения. Если grep выделяет согласованный текст, он будет выделять только буквенно-цифровую (и пространственную) часть. Параметр -o также не отображает часть "name=". И если вы перейдете к другой программе, например sed, которая может захватить текст и что-то сделать с ним, вы не будете захватывать часть "name=", хотя вы также можете сделать это, используя захват родительских шахт.

Ответ 2

Попробуйте следующее:

sed -n 's/^name=//p' filename

Он сообщает sed ничего не печатать (-n) по умолчанию, ничего не заменяет ваш префикс и печатать, если происходит замещение.

Бонус: если вам действительно нужно, чтобы он соответствовал только пробелам и буквенно-цифровым символам, вы также можете сделать это:

sed -n 's/^name=\([ 0-9a-zA-Z]*$\)/\1/p' filename

Здесь мы добавили шаблон для сопоставления пробелов и буквенно-цифровых символов только до конца строки ($), и если мы сопоставим, мы заменим группу в круглых скобках и напечатаем.

Ответ 3

grep не извлекается, как вы ожидаете. Вам нужно

grep "name=" file.txt | cut -d'=' -f1-

Ответ 4

Gawk

echo "name=some value here" | awk -F"=" '/name=/ { print $2}' 

или bash

str="name=some value here"
IFS="="
set -- $str
echo $1    
unset IFS

или

str="name=some value here"
str=${str/name=/}

Ответ 5

grep будет печатать всю строку, где она соответствует шаблону. Чтобы напечатать только шаблон, используйте параметр grep -o. Вероятно, вам также понадобится использовать sed, чтобы удалить часть шаблона name=.

grep -o 'name=[0-9a-zA-Z ]'  myfile | sed /^name=/d