Visit Our UNIX and Linux User Community


How to replace line through sed , but without uncommented?


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers How to replace line through sed , but without uncommented?
# 1  
Old 12-04-2019
How to replace line through sed , but without uncommented?

I am looking to replace minimum password value in login.defs file. it does change , but it change the commented one also.
please

1. my script to be change 12 in the below line...
Code:
sed -i '/PASS_MIN_LEN/c\PASS_MIN_LEN 12' /etc/login.defs

action- It does change, but it change in 2 place.
Code:
PASS_MIN_LEN 12  Previous was - #       PASS_MIN_LEN    Minimum acceptable password length.
PASS_MIN_LEN 12

It was replaced #(commented line) also.

Please help the correct sed syntex, which could change the excat value only

Last edited by vbe; 12-04-2019 at 02:29 PM.. Reason: code tags please
# 2  
Old 12-04-2019
Try
Code:
sed '/^PASS_MIN_LEN/c\PASS_MIN_LEN 12' /etc/login.defs

# 3  
Old 12-04-2019
Quote:
Originally Posted by RudiC
Try
Code:
sed '/^PASS_MIN_LEN/c\PASS_MIN_LEN 12' /etc/login.defs

This will work only if the setting is left-aligned, which is usually the case, but not necessarily so. Furthermore you are replacing the whole line which would delete comments within the same line, like:

Code:
PASS_MIN_LEN     10    # this is a comment

You can make that more robust by:

Code:
sed 's/^\([[:space:]]*PASS_MIN_LEN[[:space:]]\)*[0-9][0-9]*/\112/' /etc/login.defs

By the way: you know that PASS_MIN_LEN is obsoleted as it is handled by PAM nowadays, yes?
# 4  
Old 12-05-2019
The second * in the previous post should be
Code:
sed 's/^\([[:space:]]*PASS_MIN_LEN[[:space:]]*\)[0-9][0-9]*/\112/' /etc/login.defs

Alternatively one can add a filter condition and use the s command:
Code:
sed -i '/^[^#]/ s/PASS_MIN_LEN.*/PASS_MIN_LEN 12/' /etc/login.defs

Or
Code:
sed -i '/^#/!s/PASS_MIN_LEN.*/PASS_MIN_LEN 12/' /etc/login.defs

Or branch to the end of the sed script if a comment is met; useful if several commands follow.
Code:
sed -i '
  /^#/b
  /PASS_MIN_LEN.*/c\PASS_MIN_LEN 12
' /etc/login.defs


Last edited by MadeInGermany; 12-05-2019 at 12:06 PM.. Reason: some corrections

Previous Thread | Next Thread
Test Your Knowledge in Computers #120
Difficulty: Easy
The UNIX certification mark is commercially licensed by AT&T.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Hos to get the line number of uncommented line from the file

I have few lines in a text file. I am trying to get the line number of uncommented line from the text file using unix shell script. For example : I want the line number of Orange from the below text file. Here expected answer is 4 since the line 2 is commented. Apple #Orange grapes Orange (4 Replies)
Discussion started by: Brennon
4 Replies

2. Shell Programming and Scripting

Replace values in script reading line by line using sed

Hi all, Let's say I have a script calling for the two variables PA_VALUE and PB_VALUE. for pa in PA_VALUE blah blah do for pb in PB_VALUE blah blah do I have a text file with two columns of values for PA and PB. 14.5 16.7 7.8 9.5 5.6 3.6 etc etc I would like to read this... (7 Replies)
Discussion started by: crimsonengineer
7 Replies

3. Shell Programming and Scripting

sed command to replace a line in a file using line number from the output of a pipe.

Sed command to replace a line in a file using line number from the output of a pipe. Is it possible to replace a whole line piped from someother command into a file at paritcular line... here is some basic execution flow.. the line number is 412 lineNo=412 Now i have a line... (1 Reply)
Discussion started by: vivek d r
1 Replies

4. Shell Programming and Scripting

Multiple line search, replace second line, using awk or sed

All, I appreciate any help you can offer here as this is well beyond my grasp of awk/sed... I have an input file similar to: &LOG &LOG Part: "@DB/TC10000021855/--F" &LOG &LOG &LOG Part: "@DB/TC10000021852/--F" &LOG Cloning_Action: RETAIN &LOG Part: "@DB/TCCP000010713/--A" &LOG &LOG... (5 Replies)
Discussion started by: KarmaPoliceT2
5 Replies

5. Shell Programming and Scripting

sed command to replace a line at a specific line number with some other line

my requirement is, consider a file output cat output blah sdjfhjkd jsdfhjksdh sdfs 23423 sdfsdf sdf"sdfsdf"sdfsdf"""""dsf hellow there this doesnt look good et cetc etc etcetera i want to replace a line of line number 4 ("this doesnt look good") with some other line ... (3 Replies)
Discussion started by: vivek d r
3 Replies

6. Linux

Problem editting the first occurence of a pattern in the first uncommented line

Hi I have to replace a pattern found in the first uncommented line in a file. The challenge I'm facing is there are several such similar lines but I have to edit only the first uncommented line. Eg: #this is example #/root/xyz:Old_Pattern /root/xyz:Old_Pattern /root/xyz:Old_Pattern ... (10 Replies)
Discussion started by: Stoner008
10 Replies

7. Shell Programming and Scripting

I need to know how to replace a line after a pattern match with an empty line using SED

Hi How Are you? I am doing fine! I need to go now? I will see you tomorrow! Basically I need to replace the entire line containing "doing" with a blank line: I need to the following output: Hi How Are you? I need to go now? I will see you tomorrow! Thanks in advance.... (1 Reply)
Discussion started by: sags007_99
1 Replies

8. Shell Programming and Scripting

sed to replace a line with modified line in same file

i have few lines in a file... i am reading them in a while loop so a particular line is held is $line1.. consider a modified line is held in $line2.... i want to replace $line1 with $line2 in the same file... how to do it..? i have come up till the below code sed "s/$line1/$line2/g" tmpfile.sql... (5 Replies)
Discussion started by: vivek d r
5 Replies

9. Shell Programming and Scripting

How to replace one line with three in sed

Hi, I have a problem. I want to use SED to replace one line with three It looks like: PARAM='first_line,second_line,third_line' And in file: blablabla blablabla PARAM blablabla blablabla blablabla All I want is to change this into: blablabla blablabla first_line second_line... (6 Replies)
Discussion started by: ch0sen
6 Replies

10. Shell Programming and Scripting

sed - Replace Line which contains the Pattern match with a new line

I need to replace the line containing "STAGE_DB" with the line "STAGE_DB $DB # database that contains the table being loaded ($workingDB)" Here $DB is passed during the runtime. How can I do this? Thanks, Kousikan (2 Replies)
Discussion started by: kousikan
2 Replies

Featured Tech Videos