Как использовать grep для получения чего-либо только после `name=`?
Я застрял в попытке grep что-то сразу после name=
, включает только пробелы и буквенно-цифровые символы.
например:.
name=some value here
Я получаю
some value here
Im полностью newb в этом, следующий grep соответствует всем, включая name=
.
grep 'name=.*' filename
Любая помощь очень ценится.
Ответы
Ответ 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