이 명령은 다음과 같습니다.
sed -i "\|^pref\.fullscreen\.toolbarPixels|d" ~/.vmware/preferences
일하다.
하지만 이 명령은:
perl -pi -e "\|^pref\.fullscreen\.toolbarPixels|d" ~/.vmware/preferences
나에게 출력을 제공합니다 :
Backslash found where operator expected at -e line 1, near "pref\"
Backslash found where operator expected at -e line 1, near "fullscreen\"
syntax error at -e line 1, near "\|"
Execution of -e aborted due to compilation errors.
왜?
고쳐 쓰다:
test.txt 파일에는 다음이 포함됩니다.
melon
banana
peach
apple
이 명령은 다음과 같습니다.
perl -ni -e "print unless m|apple|; print unless m|banana|" test.txt
반품:
melon
melon
banana
peach
peach
apple
바꾸다:
melon
peach
왜?
답변1
사과/바나나 문제의 경우 두 명령문 모두 파일의 행에서 작동하므로 중복이 발생합니다. 명령문 필터가 없거나 중복 melon
됩니다 peach
.
다음 접근 방식을 사용하면 중복을 방지하고 원하는 삭제를 달성할 수 있습니다.
$ perl -ni -e "print unless m/(apple|banana)/" test.txt
정규식에서 가변성을 이동하는 또 다른 방법은 다음과 같습니다.
$ perl -ni -e "print unless m/apple/ or m/banana/" test.txt
답변2
Perl은 sed를 직접 대체하지는 않습니다. 비슷한 구문을 지원 s/pattern/replacement/
하지만 이것이 다른 sed 명령이 작동한다는 의미는 아닙니다.
당신은 이것을 할 수 있습니다
perl -ni -e "print unless m|^pref\.fullscreen\.toolbarPixels|"
제 생각에는 아니면 그냥
perl -ni -e "print unless /^pref\.fullscreen\.toolbarPixels/"
비표준 정규식 구분 기호를 사용할 특별한 이유가 없는 것 같기 때문입니다.