[완료] 부끄러운 유닉스 쉘 질문입니다.
글쓴이: shellee2 / 작성시간: 화, 2009/12/08 - 4:15오후
부끄러운 유닉스 쉘 질문입니다. ㅜㅜ
파일 내 문자열을 일괄 변경하기 위해서
find . -name "*.*" -exec perl -p -i -e 's/AAA/BBB/g' {} \;
를 쓰고 있는데요 문제가 생겼습니다.
AAA 를 A/B 로 (중간에 / 가 들어간 형태로)
바꿔야 할 문제가 생겼습니다.
" " 로 막아보고 별에 별 짓을 다 해봤는데도 제대로 안되네요 ;;
아.. 노가다 하기는 싫은데..ㅜㅜ 뭔가 방법이 없을까요?
Forums:
음,, 예외문자만 써주면?
짜잔,!
----
오늘도 행복한 하루~
@from caesar
감사합니다 ㅜㅜ
저에게 3시간을 벌어 주셨어요 ㅠㅠ
안그래도 \ 찾았는데 어떻게 쓰는지 계속 조합중이었는데
그냥 해당 문자 앞에 놔서 "이건 예외다" 라고 표시하는거였군요.
감사합니다 ㅜㅜ
escape 하지 않고도 가능합니다.
perl 정규식에서 구분자는 / 뿐만아니라 parsing상에 혼돈을 주지 않은것은 어느것이든 가능합니다.
따라서 정규식에 /가 나오면 escaping이 싫으면 /이외의 것으로 구분자를 지정해주면 됩니다.
[]{}() 괄호류는 쌍으로 써줘야 하고요
따라서
는
등으로 써도 동작합니다.
그럼 일반 알파벳 문자도 구분자로 쓸 수 있을까요?
답은 된다입니다.
A를 구분자로 쓴다면
문법상으로 파싱이 모호하므로 에러가 납니다.
그래서 이때는
로 해주면 정규식 표현이라는걸 제대로 인식합니다.
하지만 아직 문제가 하나 남았습니다. 구분자A가 정규식표현안에 있지요
이걸 해결하려면
처럼 구분자로 쓴 문자가 정규식내에 오면 앞의 /경우처럼 escape해주면 됩니다.
이렇게 할바에야 그냥 정규식에 없는 문자를 구분자로 쓰면 되겠죠
하지만 이렇게 변태적으로 까지 쓰는 사람은 없을듯. :)
오! 이거 옛날에 sed
오! 이거 옛날에 sed 에서도 본 거 같네요.
그땐 이해가 잘 안갔었는데 덕분에 명쾌하게 이해가 되네요 :-)
----
Let's shut up and code.
----
Let's shut up and code.
오타가 있네요
는
입니다.
.
펄은 항상 경외하면서도 친해지기 힘든 것 같습니다.
파이선부터 접한 저로써는 말이죠 ...
늦었지만
늦었지만 감사합니다. ㅠ
댓글 달기