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 03: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 01:06 PM.. Reason: some corrections

Previous Thread | Next Thread
Test Your Knowledge in Computers #545
Difficulty: Medium
Global constants are variables whose values can be changed once the variable is set.
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