使用命令行注释/取消注释某些行的最简单方法

使用命令行注释/取消注释某些行的最简单方法

有没有办法使用命令行注释/取消注释 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

相关内容