Replace last n lines


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Replace last n lines
# 1  
Old 12-30-2018
Replace last n lines

Dear Friends,

Using centos 7 version.. I have a file content like this

Code:
if bld.env.SAMBA_DIR:
    bld.program(target='winexe-static',
        source='winexe.c svcinstall.c async.c winexesvc32_exe.c winexesvc64_exe.c',
        includes=bld.env.SAMBA_DIR + '/bin/default/include/public',
        cflags='-pthread -include ' + bld.env.SAMBA_DIR + '/bin/default/include/config.h',
        linkflags='-pthread',
        stlibpath=bld.srcnode.abspath() + '/smb_static/build',
        stlib='smb_static bsd z resolv rt',
        lib='dl gnutls'
        )

Where I need to replace last but two line to below
Code:
        stlib='smb_dynamic bsd z resolv rt',
        lib='dl ls'

how can i do it with unix command instead of manually editing file.

thanks in advance
# 2  
Old 12-30-2018
Hello onenessboy,

Could you please try following once.

Code:
tac Input_file | awk 'FNR==2{sub("static","dynamic")} FNR==3{sub("gnutls","ls")} 1' | tac

In case you want to save output into Input_file itself then append > temp_file && mv temp_file Input_file in above code too.

Thanks,
R. Singh
These 2 Users Gave Thanks to RavinderSingh13 For This Post:
# 3  
Old 12-30-2018
Quote:
Originally Posted by RavinderSingh13
Hello onenessboy,

Could you please try following once.

Code:
tac Input_file | awk 'FNR==2{sub("static","dynamic")} FNR==3{sub("gnutls","ls")} 1' | tac

In case you want to save output into Input_file itself then append > temp_file && mv temp_file Input_file in above code too.

Thanks,
R. Singh
Hi Ravinder,

Thanks much for help, but is there any way that we can replace nth line without any conditions to check ? as your solution checking for strings and then replace, but is there any way, I can directly remove last but two lines and replace entire line as per my previous post ? what I mean remove completely last but two line before in that input file and append/replace these two lines in that place. The reason being stlib value may contain another strings also at times so wanted to remove that line and append
Code:
stlib='smb_dynamic bsd z resolv rt',
lib='dl ls'


Last edited by onenessboy; 12-30-2018 at 07:46 AM..
# 4  
Old 12-30-2018
Quote:
Originally Posted by onenessboy
Hi Ravinder,

Thanks much for help, but is there any way that we can replace nth line without any conditions to check ? as your solution checking for strings and then replace, but is there any way, I can directly remove last but two lines and replace entire line as per my previous post ? what I mean remove completely last but two line before in that input file and append/replace these two lines in that place
Code:
stlib='smb_dynamic bsd z resolv rt',
lib='dl ls'

You could THANK people by hitting THANKS button on left corner of each post. Could you please try following.

Code:
tac Input_file | awk 'FNR!=2 && FNR!=3' | tac

Let me know if this helps you.

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 5  
Old 12-30-2018
Quote:
Originally Posted by RavinderSingh13
You could THANK people by hitting THANKS button on left corner of each post. Could you please try following.

Code:
tac Input_file | awk 'FNR!=2 && FNR!=3' | tac

Let me know if this helps you.

Thanks,
R. Singh
Hi Ravinder,

I tried your solution here is what it displays..
stlib='smb_static bsd z resolv rt' this line still shows..
Code:
[root@xx-xx--xxx source]# tac reptest | awk 'FNR!=2 && FNR!=3' | tac
if bld.env.SAMBA_DIR:
    bld.program(target='winexe-static',
        source='winexe.c svcinstall.c async.c winexesvc32_exe.c winexesvc64_exe.c',
        includes=bld.env.SAMBA_DIR + '/bin/default/include/public',
        cflags='-pthread -include ' + bld.env.SAMBA_DIR + '/bin/default/include/config.h',
        linkflags='-pthread',
        stlibpath=bld.srcnode.abspath() + '/smb_static/build',
        stlib='smb_static bsd z resolv rt',

mean while i am trying head command too...let you know result
# 6  
Old 12-30-2018
Hello onenessboy,

It is working fine for me as follows. I am attaching screen shot for same too.
Since NOT able to copy/paste screen shot here.

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 7  
Old 12-30-2018
Quote:
Originally Posted by onenessboy
Hi Ravinder,

I tried your solution here is what it displays..
stlib='smb_static bsd z resolv rt' this line still shows..
Code:
[root@xx-xx--xxx source]# tac reptest | awk 'FNR!=2 && FNR!=3' | tac
if bld.env.SAMBA_DIR:
    bld.program(target='winexe-static',
        source='winexe.c svcinstall.c async.c winexesvc32_exe.c winexesvc64_exe.c',
        includes=bld.env.SAMBA_DIR + '/bin/default/include/public',
        cflags='-pthread -include ' + bld.env.SAMBA_DIR + '/bin/default/include/config.h',
        linkflags='-pthread',
        stlibpath=bld.srcnode.abspath() + '/smb_static/build',
        stlib='smb_static bsd z resolv rt',

mean while i am trying head command too...let you know result
Ok, as of now I figured it out with different command that is head -n to remove last 3 lines and append new lines with >>

Code:
[root@ip-xxxxx source]# head -n -3 reptest > tmp.txt && cp tmp.txt reptest
cp: overwrite ‘reptest'? y
[root@ip-xxxxxx source]# echo -e '\t'"stlib='smb_dynamic bsd z resolv rt'", >> reptest
[root@ip-xxxxxx source]# echo -e '\t'"lib='dl ls'", >> reptest
[root@ip-xxxxxx source]# echo -e '\t'")" >> reptest
[root@ip-xxxxx source]# cat reptest
if bld.env.SAMBA_DIR:
    bld.program(target='winexe-static',
        source='winexe.c svcinstall.c async.c winexesvc32_exe.c winexesvc64_exe.c',
        includes=bld.env.SAMBA_DIR + '/bin/default/include/public',
        cflags='-pthread -include ' + bld.env.SAMBA_DIR + '/bin/default/include/config.h',
        linkflags='-pthread',
        stlibpath=bld.srcnode.abspath() + '/smb_static/build',
        stlib='smb_dynamic bsd z resolv rt',
        lib='dl ls',
        )

This User Gave Thanks to onenessboy For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Replace character in odd or even lines

Hello, I'm here again asking for your precious help. I'm writing some code to convert csv files to html. I want to highlight header and also I want to have rows with alternate colors. So far this is my work###Let's format first line only with some color cat $fileIN".tmp1" | sed '1... (7 Replies)
Discussion started by: emare
7 Replies

2. UNIX for Dummies Questions & Answers

How can I replace the lines that start with a star and replace it with numbers start from 1?

I need to replace the (*) in the fist of a list with numbers using sed for example > this file contain a list * linux * computers * labs * questions to >>>> this file contain a list 1. linux 2. computers 3. labs 4. questions (7 Replies)
Discussion started by: aalbazie
7 Replies

3. Shell Programming and Scripting

[sed] Replace one line with two lines

Literally cannot get this one, guys. Single line replacement is simple, but I am not understanding the correct syntax for including a new line feed into the substitution part. Here's what I got. (Cannot use perl) #!/bin/sh set -f #Start Perms export HOME=/home/test_user # End Perms... (6 Replies)
Discussion started by: Parallax
6 Replies

4. Shell Programming and Scripting

Find and Replace Different Lines

Hi, I am looking at modifiying a file but getting a bit lost with what i am trying to do. I have the following file i need to alter. I want to search a list of files for the DEVSERIAL "0007862454" part but only the numbers. I then need to replace the line under DRIVES with the correct drive... (7 Replies)
Discussion started by: forcefullpower
7 Replies

5. Shell Programming and Scripting

search and replace, when found, delete multiple lines, add new set of lines?

hey guys, I tried searching but most 'search and replace' questions are related to one liners. Say I have a file to be replaced that has the following: $ cat testing.txt TESTING AAA BBB CCC DDD EEE FFF GGG HHH ENDTESTING This is the input file: (3 Replies)
Discussion started by: DeuceLee
3 Replies

6. Shell Programming and Scripting

Replace lines in a file

Hi everybody, I am a newbie in shell scripting and I'm trying to write a script which reads lines from a file, searching some of this lines to change a specified number. I want to replace the line for another in the file. I have to replace multiples lines, so I have a for. Now I am trying with... (1 Reply)
Discussion started by: alex82
1 Replies

7. Shell Programming and Scripting

Replace lines from one file to another

Hello, I have 8 lines containing these unique words in both files 645147468537 673962863160 673962864957 691717701950 707917019907 790085591726 792975507744 852174812753 file.dat.orig (has 1000 lines) and file.dat(has only 8 lines) I want to replace those lines in file.dat.orig by... (1 Reply)
Discussion started by: jakSun8
1 Replies

8. Shell Programming and Scripting

sed to replace two lines with one

I want to use sed to check if a short line is contained in the line after it, and if it is, to delete the short one. In other words, the input is... This is a This is a line ... and I want it to give me... This is a line Here's what I've tried so far: s/\(^.*\)\n\(\1.*$\)/\2/ Also,... (7 Replies)
Discussion started by: estebandido
7 Replies

9. Shell Programming and Scripting

replace lines in a file

I've got a file full of numbers, example: cat test.file 60835287 0 51758036 40242437 0 32737144 0 24179513 0 4131489957 I want to replace those numbers (4 Replies)
Discussion started by: TehOne
4 Replies

10. Shell Programming and Scripting

SED - Search and replace lines containing...

Hi, I need a sed line that will find all lines that contain "<int key="NSWindowStyleMask">" and then replace the entire line (not just that one string) with "<int key="NSWindowStyleMask">8223</int>". It doesn't necessarily have to use sed as long as it gets the job done :) Thanks (9 Replies)
Discussion started by: pcwiz
9 Replies
Login or Register to Ask a Question