Friday, April 15, 2022

[SOLVED] sed command to comment out text in file

Issue

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

Solution

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


Answered By - Wiktor Stribiżew
Answer Checked By - Willingham (WPSolving Volunteer)