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


37

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

例えば:

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

これは、追加または削除するだろう#サインオンをbla.conf行に14します18。通常、を使用しますがsed、これらの行の内容を知ってから検索置換操作を実行する必要があり、複数の針がある場合に間違った結果が得られます(N番目のみを交換したいだけです) 1)。


1
:題したこのQにAがあり、コードのコメントを外す複数行、viやvimの使用して、行番号で指定された番組使ってこれを行うための多くの方法sedperlterdon等により、具体的にAは!
slm

回答:


46

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"

1
オプションの'後のダブルは-i意図的ですか?それらは必要ありませんでした。
ラフィネッセ


2

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

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

  2. s 代替

  3. x 保存して閉じます


2

プロジェクトで再利用するための関数を含む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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.