명령에 대해 혼란스러워함: sed '/^#/d' ~/.profile

명령에 대해 혼란스러워함: sed '/^#/d' ~/.profile

이 명령이 무엇을 하는지 알아야 합니다.

sed '/^#/d' ~/.profile

이 명령이 제공하는 출력은 다음과 같습니다.

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

나는 다음 명령을 알고 있습니다.

sed '/^$/d' file.txt

에서 빈 줄을 삭제한다는 의미입니다 file.txt.

나는 이것이 #명령이나 주석의 끝을 의미할 수 있다는 것을 알고 있습니다.

나는 $그것이 명령이 시작된다는 것을 의미한다는 것을 알고 있습니다.

구체적인 명령은 무엇입니까?

sed '/^#/d' ~/.profile

하다?

답변1

명령 sed

sed '/^#/d' ~/.profile

~/.profile다음 두 줄 중 첫 번째 줄과 같이 파일의 줄 시작 부분에서 시작하는 모든 셸 주석을 제거 하지만 두 번째 줄은 제거하지 않습니다.

# comment
  # indented comment

이는 #줄의 시작 부분( )에서 ^일치를 시도하고 d일치하는 줄을 제거( )합니다.

쉘 스크립트에서 들여쓰기된 주석을 제거하려면 다음을 사용하십시오.

sed '/^[[:blank:]]*#/d' file

[[:blank:]]공백 문자 및 가로 탭 문자와 일치합니다.


$명령줄에 무언가를 입력하라는 메시지를 표시하기 위해 쉘에서 사용하는 일반적인 프롬프트이기 때문에 "명령의 시작"을 의미합니다.

#쉘에서 주석을 소개하는 문자입니다. 입력 1sed 에서 a 를 일치시키는 것 외에는 스크립트에서 역할이 없습니다 . 나는 그것이 "명령의 끝"을 의미하는 것을 본 적이 없습니다.#


1 이 역할은 명령 사이에 사용되는 경우 #스크립트에 주석을 추가합니다 .sed

답변2

/^#/^( ) 로 시작하는 행 과 일치합니다 #. d삭제하세요. 기본 동작은 해당 sed행을 인쇄하는 것이므로( -n지정되지 않은 경우) 다른 내용도 인쇄됩니다.

나는 이것이 #명령이나 주석의 끝을 의미할 수 있다는 것을 알고 있습니다.

나는 $그것이 명령이 시작된다는 것을 의미한다는 것을 알고 있습니다.

음 ... 아니. 정규식에서는 ^문자열(또는 줄)의 시작과 끝을 표시합니다 $. #주석 문자로 사용되므로 일반적으로 줄의 시작 부분에 사용됩니다.

주석 문자로 사용되는 많은 #파일에서는 명령 뒤에 사용할 수 있지만 줄 시작 부분에는 직접 사용할 수 없습니다. 예제 출력의 나머지 주석에 표시된 것처럼 들여쓰기가 가능합니다.

/^ *#/d들여쓰기된 주석도 제거하므로 ( 또는 ) 와 같은 /^[ \t]*#/d것이 더 나을 수 있습니다.

관련 정보