sed 및 regex를 사용하여 파일에 있는 문자열을 찾고 바꾸는 방법은 무엇입니까?

sed 및 regex를 사용하여 파일에 있는 문자열을 찾고 바꾸는 방법은 무엇입니까?

다음 유형의 줄이 포함된 파일이 있습니다.

find /home/subd1/subd2/$dirname -type d 
find /home1/subd1/subd2/$dirname -type d 
find /home10/subd1/subd2/$dirname -type d 

/home/or 을 찾아 DIFFERENT 또는 /home<no>/으로 바꾸고 싶습니다 . 기본적으로 찾기 및 바꾸기 -/home//home<no>/

/home with /home2 or
/home2 with /home3 or
/home3 with /home
etc.

나는 ~하려고 노력한다 -

sed -i 's/\/home.?\//\/home3\//g' /path/to/file
sed -i 's/\/home[\d]?\//\/home3\//g' /path/to/file

그러나 이것은 파일을 변경하지 않았습니다. 여기서 뭔가 빠졌나요? 감사해요

답변1

\d지원하지 않습니다 sed. [0-9]대안을 사용해 보세요 .

예를 들어 제공해주신 샘플 파일을 사용해 보았습니다.

find /home/subd1/subd2/$dirname -type d 
find /home1/subd1/subd2/$dirname -type d 
find /home10/subd1/subd2/$dirname -type d 

주어지면 sed -i 's;/home[0-9]*/;/home3/;g' test.txt( ;각 항목을 탈출할 필요가 없도록 sed 구분 기호 로 사용됨 /) 파일은 다음과 같이 편집됩니다.

find /home3/subd1/subd2/$dirname -type d 
find /home3/subd1/subd2/$dirname -type d 
find /home3/subd1/subd2/$dirname -type d 

이것이 바뀔 것이라는 점은 주목할 가치가 있습니다.모든/home/및 인스턴스는 /home<no>/동일한 새 값입니다(이 경우 /home3/). 이것이 당신의 목표라고 생각하지만 그렇지 않다면 다른 sed표현 방법이 필요할 것입니다.

관련 정보