정규표현식의 도움이 필요합니다

ixevexi의 이미지

제가 리눅스엔 초짜라 아직 정규표현식을 모릅니다.

그런데 간단한 텍스트 치환작업을 해야하는데
배워서 할 시간이 매우 부족합니다 :oops:

고수님들 한번만 도와주시면 안될까요?

어느 디렉토리안에있는 모든 파일을 읽어서

: ? 문자를 >로 바꾸는 작업을 하려고 합니다.

see2002의 이미지

정규표현식 힌트를 알려드리자면,
echo 'fsjk??fjdk::??:?x::xx' | sed -e 's/[:\?]/>/g'
sed를 사용해서 치환을 한다면 s/[:\?]/>/g 부분이 되겠습니다.

eseo의 이미지

ixevexi wrote:

어느 디렉토리안에있는 모든 파일을 읽어서

: ? 문자를 >로 바꾸는 작업을 하려고 합니다.

이정도로 만들면 되겠네요.
이 스크립트에선, 변수 DIR 에서는 끝에 항상 "/"를 붙여 줘야 합니다.
알맞게 고쳐 쓰시길.

#!/bin/sh
DIR=tt/
for FILE in `ls $DIR`
do
    sed 's/?/>/g' $DIR$FILE > $DIR$FILE.tmp
    # mv $DIR$FILE.tmp $DIR$FILE    <- 확인 작업을 위해 막아놨음.
done

---
배려하는 마음을 갖자.

ixevexi의 이미지

음.. 해봤는데 제 질문이 잘못 된것 같습니다

.?이라는 문자두개를 < 로 바꾸는 거였는데요 -_-;;

꼭 저 패턴이 일치해야합니다

방법이 없을까요?

--------------덧붙임 ----------
정규식이 의외로 그리 어렵지 않네요
윗분들의 힌트로
위의 스크립트를 조금 바꾸어서 해보았습니다
중간 부분을

's/\.?/</g' 로 대치를 시켰는데
원하는 대로 안되더군요 :oops:
's/\.\?/</g' 도 역시 원하는 것이 아니었습니다
분명히 둘중 하나는 되야하는것 아닙니까?

?는 보기에 어떠한 와이드카드에도 대응하지 않는데 \를 쓰는 건 아닌거 같구

C++, 그리고 C++....
죽어도 C++

맹고이의 이미지

find . -type f -exec vim -c $'%s/\.?/</g\nwq\n' \{} \;

이렇게 해도 되네요... :o

find . -type f -exec perl -pi -e 's/\.\?/</g' \{} \;

이렇게 해도 되고... ;;