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

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

コマンドラインを使用して、シェル/構成/Ruby スクリプトをコメント化/コメント解除する方法はありますか?

例えば:

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

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

答え1

bla.conf の 2 行目から 4 行目をコメント化するには:

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

必要なコマンドを作成するには、上記を comment というシェル スクリプトに記述するだけです。

#!/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"

答え2

GNU sed を使用する場合 (オプションを使用してファイルを置換します-i):

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

答え3

関数を含む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

答え4

使用(旧称 Perl_6)


コメントアウト行:

~$ raku -ne 'if (6 <= ++$ <= 8) { put S/^/#/ } else { $_.put };' alpha10.txt

#OR

~$ raku -ne '(6 <= ++$ <= 8) ?? put S/^/#/ !! $_.put;' alpha10.txt

#OR

~$ raku -ne 'put (6 <= ++$ <= 8) ?? S/^/#/ !! $_;' alpha10.txt

#OR

~$ raku -pe 'if (6 <= ++$ <= 8) { s/^/#/ };' alpha10.txt

サンプル入力:

~$ raku -e 'print "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\n";' > alpha10.txt

サンプル出力:

a
b
c
d
e
#f
#g
#h
i
j

これらの回答 (上記および下記) は、Raku の条件構文、または三項演算子「Test True False」を利用していますifelse詳細??について!!は、以下の URL を参照してください。連鎖<=不等式に注意してください。また、条件を囲む括弧は不要です。引用符で囲むのが難しい場合は、 , (量指定子の有無にかかわらず)#を使用して、1 文字のカスタム文字クラスとして八分音符を入力できます<[#]>


次の行のコメントを解除します:

~$ raku -ne 'if (6 <= ++$ <= 8) { put S/^ \s* "#" // } else { $_.put };' alpha10commented.txt

#OR

~$ raku -ne '(6 <= ++$ <= 8) ?? put S/^ \s* "#"// !! $_.put;' alpha10commented.txt

#OR

~$ raku -ne 'put (6 <= ++$ <= 8) ?? S/^ \s* "#" // !! $_;' alpha10commented.txt

#OR

~$ raku -pe 'if (6 <= ++$ <= 8) { s/^ \s* "#" // };' alpha10commented.txt

サンプル入力:

~$ raku -e 'print "a\nb\nc\nd\ne\n#f\n#g\n#h\ni\nj\n";' > alpha10commented.txt

サンプル出力:

a
b
c
d
e
f
g
h
i
j

https://docs.raku.org/syntax/if
https://docs.raku.org/language/operators#index-entry-operator_ternary
https://raku.org

関連情報