Use sed with ignore case while adding text before some pattern

后端 未结 6 1218
名媛妹妹
名媛妹妹 2020-12-06 17:26
sed -i \'/first/i This line to be added\' 

In this case,how to ignore case while searching for pattern =first

相关标签:
6条回答
  • 2020-12-06 17:40

    You can use the following:

    sed 's/[Ff][Ii][Rr][Ss][Tt]/last/g' file
    

    Otherwise, you have the /I and n/i flags:

    sed 's/first/last/Ig' file
    

    From man sed:

    I

    i

    The I modifier to regular-expression matching is a GNU extension which makes sed match regexp in a case-insensitive manner.

    Test

    $ cat file
    first
    FiRst
    FIRST
    fir3st
    $ sed 's/[Ff][Ii][Rr][Ss][Tt]/last/g' file
    last
    last
    last
    fir3st
    $ sed 's/first/last/Ig' file
    last
    last
    last
    fir3st
    
    0 讨论(0)
  • 2020-12-06 17:43

    You can try

    sed 's/first/somethingelse/gI'
    
    0 讨论(0)
  • 2020-12-06 17:46

    For versions of awk that don't understand the IGNORECASE special variable, you can use something like this:

    awk 'toupper($0) ~ /PATTERN/ { print "string to insert" } 1' file
    

    Convert each line to uppercase before testing whether it matches the pattern and if it does, print the string. 1 is the shortest true condition, so awk does the default thing: { print }.

    To use a variable, you could go with this:

    awk -v var="$foo" 'BEGIN { pattern = toupper(foo) } toupper($0) ~ pattern { print "string to insert" } 1' file
    

    This passes the shell variable $foo and transforms it to uppercase before the file is processed.

    Slightly shorter with bash would be to use -v pattern="${foo^^}" and skip the BEGIN block.

    0 讨论(0)
  • 2020-12-06 17:56

    GNU sed

    sed '/first/Ii This line to be added' file
    
    0 讨论(0)
  • 2020-12-06 17:57

    Use the following, \b for word boundary

    sed 's/\bfirst\b/This line to be added/Ig' file
    
    0 讨论(0)
  • 2020-12-06 17:59

    if you want to save some typing, try awk. I don't think sed has that option

     awk -v IGNORECASE="1" '/first/{your logic}' file
    
    0 讨论(0)
提交回复
热议问题