• VMware

    Learn about VMware virtualization for its products like vsphere ESX and ESXi, vCenter Server, VMware View, VMware P2V and many more

  • Linux

    Step by step configuration tutorials for many of the Linux services like DNS, DHCP, FTP, Samba4 etc including many tips and tricks in Red Hat Linux.

  • Database

    Learn installation and configuration of databases like Oracle, My SQL, Postgresql, etc including many other related tutorials in Linux.

  • sed: perform search and replace only on specific lines (not globally)

    By default when we perform search and replace action using sed, that is done globally within a file. Although if you have a line number you can perform the replace based on the line number but what if you have a file where you don't know the line number?


    Let us got through different examples where you can perform such search and replace based on string match but only on the specific lines





    Below is my sample file
    # cat /tmp/file
    four five six
    one
    seve eight nine
    one two three
    one
    ten eleven twelve
    one


    Perform search and replace based on line number

    In my sample file I have multiple instances of word "one" but I would like my search and replace regex to work only on the 4th line

    To do the same use below regex
    # sed -e '4s/one/replaced/g' /tmp/file
    four five six
    one
    seve eight nine
    replaced two three
    one
    ten eleven twelve
    one

    Here as you see I have given my line number along with the substitute regex, so the can be replaced with any other line number where you want to perform your replacement

    Perform search and replace based on a specific string match

    Using a line number is one way but still not the best way, the easier way is if you already know a string which exists n the line where you want to perform the replacement. For eg in my sample file I would like to replace the word 'one' on the line which has string'two'

    Observe the below regex
    # sed -e '/two/s/one/replaced/g' /tmp/file
    four five six
    one
    seve eight nine
    replaced two three
    one
    ten eleven twelve
    one

    As you see with the 'substitute' regex I have provided the string which it should search first before performing the requested action. So even when my file had 3 instances of 'one', the replace was performed only on the line having 'two'

    The above regex can be combined with other meta characters to improvise the task

    Suppose if there are multiple instances of 'two' in the file but you would like to perform replacement only on the line which starts with 'two'
    # sed -e '/^two/s/one/replaced/g' /tmp/file
    To perform a replace on a line which ends with 'two'
    # sed -e '/two$/s/one/replaced/g' /tmp/file







    sed: perform search and replace only on specific lines (not globally) sed: perform search and replace only on specific lines (not globally) Reviewed by Deepak Prasad on Tuesday, September 12, 2017 Rating: 5

    No comments:

    Powered by Blogger.