다음 유형의 줄이 포함된 파일이 있습니다.
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
표현 방법이 필요할 것입니다.