ファイルの行にコメントを付けてコメントを解除するシェルスクリプト

ファイルの行にコメントを付けてコメントを解除するシェルスクリプト

lserverなど、すべてのサーバーを一覧表示するファイルがあります。

$ cat lserver
A1
A2
A3 

lserverの例:すべてのサーバーにコメントを付けるためのシェルスクリプトを作成したいと思います。

$ stopm.sh A2
$ cat lserver 
A1
#A2
A3 

lserverからサーバーのコメントを外します。

$ startm.sh A2
$ cat lserver
A1
A2
A3

どんな提案がありますか?

答え1

コメント:

server=A2; sed -i "/^$server/ c#$server" file.txt

コメント解除:

server=A2; sed -i "/^#$server/ c$server" file.txt

答え2

次の機能を試してください。

function comment() {
    local regex="${1:?}"
    local file="${2:?}"
    local comment_mark="${3:-#}"
    sed -ri "s:^([ ]*)($regex):\\1$comment_mark\\2:" "$file"
}

function uncomment() {
    local regex="${1:?}"
    local file="${2:?}"
    local comment_mark="${3:-#}"
    sed -ri "s:^([ ]*)[$comment_mark]+[ ]?([ ]*$regex):\\1\\2:" "$file"
}

使用法:

comment REGEX FILE [COMMENT-MARK]
uncomment REGEX FILE [COMMENT-MARK]

COMMENT-MARK default value is #

あなたの場合は、次のことを行います。

comment A2 /path/to/lserver

答え3

(server=A2; sed -ir -e "s/^$server\$/#\1/")

答え4

I have done by below script and it worked fine too

Scriptname

#!/bin/bash

echo "enter the servername"
read s1
sed -i "/$s1/s/^/#/g" filename

sed -i "s/^#//g" filename

関連情報