나는 Windows 기반의 여러 가지를 가지고 있습니다.m3u재생 목록 - 폴더 경로 대신 에 시작 ..\..\
하고 가지고 있는 반면 우분투는 절대 경로 로 시작하는 것을 선호합니다 .\
/
/media/usr/part/dir/
다음과 같이 변경하고 싶습니다.
- 모두
..\..\
다음으로 교체/media/usr/part/dir/
- 모두
\
다음으로 교체/
find /home/user/directory -name \*.m3u -exec sed -i "s/\.\.\\\.\.\/\/media\/usr\/part\/dir\//g" {} \;
추천대로 사용해봤는데여기, 제안된 대로 _
및 구분 기호를 사용해 보았습니다.:
여기.
그러나 나는 계속해서
sed: -e expression #1, char 36: unterminated `s' command
내 파일에서 필요한 내용을 어떻게 바꾸나요?
답변1
s/\.\.\\\.\.\/\/media\/usr\/part\/dir\//g
이 명령은 잘못된 것입니다. 왜냐하면 첫 번째 앞에 sed
누락이 있어서 앞의 명령 이 리터럴 (패턴 변경 및 구분 기호 "먹기")로 이스케이프되도록 유도하고 각 줄에서 단일 발생을 대체하기 위한 목적으로 끝에 과도한 스위치가 있습니다 . 어쨌든 문자를 문자 부분으로 바꾸는 것이 누락되었습니다 .\
/
\
/
..\..\
g
\
/
대신 이것을 사용하십시오. 나는 갑작스런 상황을 없애기 위해 분리기를 자유롭게 변경했습니다.기울어지는 이쑤시개 증후군엄청난 수의 파일에 대한 명령 성능을 향상시키기 위해 다음 ;
과 같이 변경합니다 .+
find /home/user/directory -name \*.m3u -exec sed -i 's|\.\.\\\.\.\\|/media/usr/part/dir/|; s|\\|/|g' {} \+
산출:
~/tmp$ cat playlist1.m3u
..\..\path1
stuff
..\..\path2\path2
stuff
..\..\path3\path3\path3
stuff
~/tmp$ find . -name \*.m3u -exec sed -i 's|\.\.\\\.\.\\|/media/usr/part/dir/|; s|\\|/|g' {} \+
~/tmp$ cat playlist1.m3u
/media/usr/part/dir/path1
stuff
/media/usr/part/dir/path2/path2
stuff
/media/usr/part/dir/path3/path3/path3
stuff