최근에 nvidia 패키지 전송으로 인해 몇 가지 오류가 발생했기 때문에 이 명령을 사용해야 했지만 어떻게 작동하는지 정확히 모르겠습니다.
LC_MESSAGES=C dpkg-divert --list '*nvidia-340*' | sed -nre 's/^diversion of (.*) to .*/\1/p' | xargs -rd'\n' -n1 -- sudo dpkg-divert --remove
sudo apt --fix-broken install
파이프 연산자가 어떻게 작동하는지 읽었고 알고 있지만 LC_MESSAGES
명령 sed
이 이러한 특정 옵션과 어떻게 작동하는지 알 수 없습니다.
답변1
LC_MESSAGES=C dpkg-divert --list '*nvidia-340*'
영어로 glob 패턴과 일치하는 모든 전환을 나열하므로 *nvidia-340*
출력은 "diversion of ... to ... by ..." 형식이 됩니다.
sed -nre 's/^diversion of (.*) to .*/\1/p'
"diversion of"와 "to" 사이의 텍스트를 추출하고,즉전송된 파일의 이름입니다. ; 자동 패턴 공간 출력을 비활성화하는 -nre
것과 동일 하므로 명령에서 요청하지 않는 한 아무것도 출력되지 않습니다 (명령 끝 참조 ). 확장 정규식을 활성화하고 실행하려는 스크립트를 도입합니다. 정규식에서는 줄 시작 부분(공백 포함)에서 "diversion of"를 일치시키고, 임의 개수의 문자를 일치시키고 일치 그룹을 만듭니다 . 이는 명령에서 전체 텍스트만 일치하는 그룹의 내용으로 바꾸는 데 사용됩니다(-n -r -e
-n
p
sed
-r
-e
^diversion of
(.*)
to .*
s
\1
즉"diversion of"와 "to" 사이의 텍스트). 명령이 일치하면 p
최종적으로 패턴 공간이 인쇄됩니다.s
xargs -rd'\n' -n1 -- sudo dpkg-divert --remove
sudo dpkg-divert --remove
이전 단계의 각 파일 출력에 대해 실행하고 해당 전송을 삭제합니다.
sudo apt --fix-broken install
손상된 종속성을 수정해 보세요.