sed는 문자열의 중간을 대체합니다.

sed는 문자열의 중간을 대체합니다.

구성 파일을 통해 내 배경화면을 변경하는 라이너를 작성하려고 합니다. 적응해 보세요:sed를 사용하여 정규식 캡처 그룹 콘텐츠 교체하지만 제대로 이해하지 못하는 것 같습니다.

내 구성 파일에는 다음 문자열이 포함되어 있습니다.

output * bg ~/pictures/wallpapers/old-wallpaper.jpg fill

이 문자열의 경로를 다른 경로로 변경하고 싶습니다.

이것은 나에게 가장 의미가 있지만 올바르게 캡처하지는 않습니다.

sed "/output \* bg /s|.* fill|~/path/to/foobar.jpg fill|" sed_file

output * bg ~/pictures/wallpapers/old-wallpaper.jpg fill

이것은 완전히 잘못된 것처럼 보이지만 작업이 완료된 것 같습니다. 나는 그것이 로 시작하는 모든 것을 대체한다고 생각합니다 output.

sed "/output \* bg/s| .* fill| \* bg ~\/path\/to/foobar.jpg fill|" sed_file

output * bg ~/path/to/foobar.jpg fill

답변1

GNU sed를 사용하세요. 귀하의 경로에 공백이나 파이프가 포함되어 있지 않다고 가정합니다. s///에서 전환했습니다 s|||.

sed -E 's|^(output \* bg) [^ ]+ |\1 foo |' file

산출:

출력 * bg foo 패딩

-E: 확장 정규식 사용

관련 정보