구성 파일을 통해 내 배경화면을 변경하는 라이너를 작성하려고 합니다. 적응해 보세요: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
: 확장 정규식 사용