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


37

명령 줄을 사용하여 쉘 / 구성 / 루비 스크립트를 주석 처리하거나 주석 처리를 제거하는 방법이 있습니까?

예를 들면 다음과 같습니다.

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

이렇게하면 에 온라인 #사인온 이 추가되거나 제거 됩니다 . 일반적으로을 사용 하지만 해당 줄의 내용을 알고 교체 찾기 작업을 수행해야하며 바늘이 두 개 이상인 경우 잘못된 결과를 얻을 수 있습니다 (우리는 N 번째 만 바꾸고 싶습니다) 하나).bla.conf1418sed


1
: 표제이 Q로하는 A가 코드의 주석 다중 선, VI 또는 VIM 이용하는 라인 번호에 의해 지정된 방송하여 이러한 작업을 수행하기위한 많은 방법 sed, perlterdon 등에 의해 구체적으로 A는!
slm

답변:


46

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"

1
옵션 '후 더블은 -i의도적인가? 필요하지 않았습니다.
raphinesse

8

GNU sed를 사용하여 (파일을 -i옵션 으로 대체 ) :

sed -i '14,18 s/^/#/' bla.conf
sed -i '14,18 s/^##*//' bla.conf

2

Ex 모드에서 Vim을 사용할 수 있습니다 :

ex -sc 'g/^\s*[^#]/s/^/#/' -cx bla.conf
ex -sc 'g/^\s*#/s/#//' -cx bla.conf
  1. g 글로벌 정규식

  2. s 대용품

  3. x 저장하고 닫습니다


2

함수로 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.