Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sed - Commenting a line matching a specific string AND that is not already commented out

Tags:

regex

sed

I have the following test file

AAA BBB CCC 

Using the following sed I can comment out the BBB line.

# sed -e '/BBB/s/^/#/g' -i file 

I'd like to only comment out the line if it does not already has a # at the begining.

# sed -e '/^#/! /BBB/s/^/#/g' file  sed: -e expression #1, char 7: unknown command: `/' 

Any ideas how I can achieve this?

like image 462
Jean-Francois Chevrette Avatar asked Aug 01 '13 15:08

Jean-Francois Chevrette


People also ask

How do I comment out a specific line in a shell script?

comment and uncomment a line with Shell Script Requirement is: 1. comment and uncomment the line with Shell Script: /opt/admin/fastpg/bin/fastpg.exe -c -=NET (using fastpg.exe as a search option) 2.

How do you end a sed?

(quit) Exit sed without processing any more commands or input. (quit) This command is the same as q , but will not print the contents of pattern space.


1 Answers

Assuming you don't have any lines with multiple #s this would work:

sed -e '/BBB/ s/^#*/#/' -i file 

Note: you don't need /g since you are doing at most one substitution per line.

like image 91
aragaer Avatar answered Sep 21 '22 12:09

aragaer