Im trying to comment out lines within a file by a specific word. However there are multiple lines with a similar word.
BBB-m more info
BBB more info
BBB-a more info
BBB-w more info
Im looking to comment out the line with just 'BBB' Is this possible? Thank you!
sed -i -- 's/BBB/; BBB/g' $file
CodePudding user response:
This should do the trick:
sed -i 's/^[^#]*BBB$/#&/' file
The & character matches the entire portion of the pattern and as @Barmar said in the comments the $ at the end of BBB filters out other lines.
CodePudding user response:
You can use
awk '$1 == "BBB"{$0="; "$0}1' file > tmp && mv tmp file
sed 's/^BBB[[:space:]]/; &/' file > tmp && mv tmp file
sed -E 's/^BBB([[:space:]]|$)/; &/' file > tmp && mv tmp file
The '$1 == "BBB"{$0="; "$0}1'
awk
command means that if the first field value is equal to BBB
, a ;
is appended at the line start. Else, the line is output as is.
The 's/^BBB[[:space:]]/; &/'
sed command matches a line that starts with BBB
and any one whitespace and then is replaced with ;
, space and the matched text. The -E
POSIX ERE variation with ^BBB([[:space:]]|$)
allows matching BBB
as a standalone line.
See the online demo:
#!/bin/bash
s='BBB-m more info
BBB more info
BBB-a more info
BBB-w more info'
awk '$1 == "BBB"{$0="; "$0}1' <<< "$s"
echo "---"
sed 's/^BBB[[:space:]]/; &/' <<< "$s"
Both return
BBB-m more info
; BBB more info
BBB-a more info
BBB-w more info
CodePudding user response:
Using sed
$ sed '/[[:punct:]]/!{s/BBB/; &/}' input_file
BBB-m more info
; BBB more info
BBB-a more info
BBB-w more info