
다음 내용이 포함된 텍스트 파일이 있습니다.
#[다중 라이브러리]
#[multilib]가 존재한다면 줄에서 #을 제거하고 싶습니다.
나는 시도했다:
sed -i 's/^#[multilib]/[multilib]/'
그리고 줄에서 #은 제거되지 않습니다.
답변1
[
문자는 ]
정규식에서 특별합니다. 리터럴 문자열을 일치시키려면 이스케이프해야 합니다.
sed -i 's/^#\[multilib\]/[multilib]/' file
# or
sed -i -E 's/^#(\[multilib\])/\1/' file
답변2
-i
이는 에서 영감을 받은 비표준 및 비이식성 옵션 입니다 . 여기에서 직접 사용할 수도 있습니다.sed
perl
-i
perl
perl -pi -e '$_ = substr($_, 1) if rindex($0, "#[multilib]", 0)' file
또는 정규 표현식을 사용하세요.
perl -pi -e 's/^#(?=\[multilib\])//' file
(?=...)
하나는 어디에 있습니까?적극적이고 적극적인#
연산자이므로 뒤에 가 올 때마다 선행을 제거합니다 [multilib]
. Perl 정규식에서는 sed 정규식과 마찬가지로 이스케이프 또는 이스케이프에 사용할 수 있는 연산자 [
입니다 .]
\
\Q[multilib]\E