web-dev-qa-db-ja.com

コマンドラインを使用して特定の行をコメント/コメント解除する最も簡単な方法

コマンドラインを使用してShell/config/Rubyスクリプトをコメント/コメント解除する方法はありますか?

例えば:

$ comment 14-18 bla.conf
$ uncomment 14-18 bla.conf

これにより、行#からbla.conf14サインオン18が追加または削除されます。通常はsedを使用しますが、これらの行の内容を知ってから検索置換操作を行う必要があります。これにより、複数の針がある場合に間違った結果が返されます(そして、 N番目のものを置き換える)。

37
Kokizzu

Bla.confの2行目から4行目までコメントするには:

sed -i '2,4 s/^/#/' bla.conf

必要なコマンドを作成するには、上記をコメントと呼ばれるシェルスクリプトに挿入します。

#!/bin/sh
sed -i "$1"' s/^/#/' "$2"

このスクリプトは、最初と最後の行がダッシュではなくコンマで区切られることを除いて、あなたのスクリプトと同じように使用されます。例えば:

comment 2,4 bla.conf

コメント解除コマンドも同様に作成できます。

高度な機能

sedの行選択は非常に強力です。番号で最初と最後の行を指定することに加えて、正規表現でそれらを指定することも可能です。したがって、fooを含む行からbarを含む行までのすべての行をコマンドする場合は、次のコマンドを使用します。

comment '/foo/,/bar/' bla.conf

BSD(OSX)システム

BSD sedでは、-iオプションは、空の文字列であっても引数が必要です。したがって、たとえば、上記のtopコマンドを次のように置き換えます。

sed -i '' '2,4 s/^/#/' bla.conf

そして、スクリプトのコマンドを次のように置き換えます。

sed -i '' "$1"' s/^/#/' "$2"
49
John1024

GNU sed(ファイルを-iオプション):

sed -i '14,18 s/^/#/' bla.conf
sed -i '14,18 s/^##*//' bla.conf

VimはExモードで使用できます。

ex -sc 'g/^\s*[^#]/s/^/#/' -cx bla.conf
ex -sc 'g/^\s*#/s/#//' -cx bla.conf
  1. gグローバル正規表現

  2. s代替

  3. x保存して閉じる

2
Steven Penny

プロジェクトで再利用する関数を含むbash_fileを作成できます

#!/bin/bash

# your target file
CONFIG=./config.txt

# comment target
comment() {
  sed -i '' "s/^$1/#$1/" $CONFIG
}

# comment target
uncomment() {
  echo $1
  sed -i '' "s/^#$1/$1/" $CONFIG
}


# Use it so:
uncomment enable_uart
comment arm_freq
2
Jan