有沒有辦法使用命令列註解/取消註解 shell/config/ruby 腳本?
例如:
$ comment 14-18 bla.conf
$ uncomment 14-18 bla.conf
這將會新增或刪除線上#
登入。通常我使用,但我必須知道這些行的內容,然後執行查找替換操作,當有多個針時(並且我們只想替換第 N 個針),這會給出錯誤的結果一)。bla.conf
14
18
sed
答案1
註 bla.conf 的第 2 行到第 4 行:
sed -i '2,4 s/^/#/' bla.conf
要建立您想要的命令,只需將以上內容放入名為 comment 的 shell 腳本中:
#!/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 的條件語法,即if
/else
或三元:「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/language/operators#index-entry-operator_ternary
https://raku.org