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

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

コマンドラインを使用してシェル/config/rubyスクリプトにコメントを付けるか、コメントを解除する方法はありますか?

たとえば、

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

オンラインログインが追加または削除されます#。一般的に使用しますが、行の内容を知ってから検索と置換を実行する必要があります。これにより、複数のピンがあると誤った結果が得られます(N番目のピンaのみを交換しようとします)。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オプションには空の文字列でも引数が必要です。たとえば、上記のトップレベルのコマンドを次のように置き換えます。

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

ifこれらの答え(上と下)は、Rakuの条件付き構文(elseまたは3項:「Test ??True !!False」)を使用します。詳しくは下記URLをご覧ください。接続<=の不平等に注意してください。また、条件の周りの括弧は重複しています。引用に問題がある場合は、(数量子の有無にかかわらず)を介して#単一文字、カスタム文字クラスとしてoctothorpeを入力できます。<[#]>


次の行のコメントを外します。

~$ 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/言語/operators#index-entry-operator_ternary
https://raku.org

関連情報