How to use grep to get anything just after `name=`?

前端 未结 5 1492
执念已碎
执念已碎 2020-12-07 18:45

I’m stuck in trying to grep anything just after name=, include only spaces and alphanumeric.

e.g.:

name=some value here
<
相关标签:
5条回答
  • 2020-12-07 18:51

    grep will print the entire line where it matches the pattern. To print only the pattern matched, use the grep -o option. You'll probably also need to use sed to remove the name= part of the pattern.

    grep -o 'name=[0-9a-zA-Z ]'  myfile | sed /^name=/d
    
    0 讨论(0)
  • 2020-12-07 18:56

    gawk

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

    or with bash

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

    or

    str="name=some value here"
    str=${str/name=/}
    
    0 讨论(0)
  • 2020-12-07 18:57

    grep does not extract like you expect. What you need is

    grep "name=" file.txt | cut -d'=' -f1-
    
    0 讨论(0)
  • 2020-12-07 19:09

    Try this:

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

    It tells sed to print nothing (-n) by default, substitute your prefix with nothing, and print if the substitution occurs.

    Bonus: if you really need it to only match entries with only spaces and alphanumerics, you can do that too:

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

    Here we've added a pattern to match spaces and alphanumerics only until the end of the line ($), and if we match we substitute the group in parentheses and print.

    0 讨论(0)
  • 2020-12-07 19:11

    As detailed here, you want a positive lookbehind clause, such as:

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

    The -P makes grep use the Perl dialect, otherwise you'd probably need to escape the parentheses. You can also, as noted elsewhere, append the -o parameter to print out only what is matched. The part in brackets specifies that you want alphanumerics and spaces.

    The advantage of using a positive lookbehind clause is that the "name=" text is not part of the match. If grep highlights matched text, it will only highlight the alphanumeric (and spaces) part. The -o parameter will also not display the "name=" part. And, if you transition this to another program like sed that might capture the text and do something with it, you won't be capturing the "name=" part, although you can also do that by using capturing parenthess.

    0 讨论(0)
提交回复
热议问题