sed 일치를 사용하는 경우 줄의 첫 번째 문자를 삭제하는 방법은 무엇입니까?

sed 일치를 사용하는 경우 줄의 첫 번째 문자를 삭제하는 방법은 무엇입니까?

다음 내용이 포함된 텍스트 파일이 있습니다.

#[다중 라이브러리]

#[multilib]가 존재한다면 줄에서 #을 제거하고 싶습니다.

나는 시도했다:

sed -i 's/^#[multilib]/[multilib]/'

그리고 줄에서 #은 제거되지 않습니다.

답변1

[문자는 ]정규식에서 특별합니다. 리터럴 문자열을 일치시키려면 이스케이프해야 합니다.

sed -i 's/^#\[multilib\]/[multilib]/' file
# or
sed -i -E 's/^#(\[multilib\])/\1/' file

답변2

-i이는 에서 영감을 받은 비표준 및 비이식성 옵션 입니다 . 여기에서 직접 사용할 수도 있습니다.sedperl-iperl

perl -pi -e '$_ = substr($_, 1) if rindex($0, "#[multilib]", 0)' file

또는 정규 표현식을 사용하세요.

perl -pi -e 's/^#(?=\[multilib\])//' file

(?=...)하나는 어디에 있습니까?적극적이고 적극적인#연산자이므로 뒤에 가 올 때마다 선행을 제거합니다 [multilib]. Perl 정규식에서는 sed 정규식과 마찬가지로 이스케이프 또는 이스케이프에 사용할 수 있는 연산자 [입니다 .]\\Q[multilib]\E

관련 정보