使用命令列註解/取消註解某些行的最簡單方法

使用命令列註解/取消註解某些行的最簡單方法

有沒有辦法使用命令列註解/取消註解 shell/config/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 的 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

相關內容