Replacing string based on line number

  • I have a situation where i want to replace a particular string in many files

    Replace a string AAA with another string BBB but there are lot of strings starting with AAA or ending in AAA ,and i want to replace only one on line 34 and keep others intact.

    Is it possible to specify by line number,on all files this string is exactly on 34th line.

  • Correct answer

    8 years ago

    You can specify line number in sed or NR (number of record) in awk.

    awk 'NR==34 { sub("AAA", "BBB") }'
    

    or use FNR (file number record) if you want to specify more than one file on the command line.

    awk 'FNR==34 { sub("AAA", "BBB") }'
    

    or

    sed '34s/AAA/BBB/'
    

    to do in-place replacement with sed

    sed -i '34s/AAA/BBB/' file_name
    

    @VanagaS Thanks, what if I need to replace all the matches I find starting from line 34 and afterwards till EOF? possible entries within lines 1 and 34 shouldn't be touched. thanks

    @ramruma can you give hints?

    @jacquelyn.marquardt you can do something like sed 34,\$s/aaa/bbb/ filename you can find all options using the man pages under the addresses section: man sed

License under CC-BY-SA with attribution


Content dated before 6/26/2020 9:53 AM