명령줄을 사용하여 특정 줄에 주석을 달거나 주석 처리를 해제하는 가장 간단한 방법

명령줄을 사용하여 특정 줄에 주석을 달거나 주석 처리를 해제하는 가장 간단한 방법

명령줄을 사용하여 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라는 쉘 스크립트에 넣으세요.

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

if이러한 답변(위 및 아래)은 Raku의 조건부 구문( / 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/언어/operators#index-entry-operator_ternary
https://raku.org

관련 정보