저는 단지 주니어 스크립터이므로 확실히 도움이 필요합니다. 감사해요.

저는 단지 주니어 스크립터이므로 확실히 도움이 필요합니다. 감사해요.

두 스크립트 간의 충돌을 피하기 위해 파일 줄의 값을 변경하고 싶습니다.~/.ideskrc0으로. 다음은 필수 값이 있는 행입니다.

Background.Delay: 0

이제 문제를 처리할 수 있는 수동 솔루션이 생겼습니다.

STRING="Background.Delay: 0"
if ! grep -q "$STRING" $HOME/.ideskrc;
then
    yad --geometry 300x300 --text="Rotate Backgrounds and Separate Backgrounds can not be run at the same time. \n
    Run Rotate Backgrounds and set that Delay to zero."
exit 0
fi

사용자 개입 없이 그냥 변경할 수 있으면 좋을 것 같습니다. 나는 성공하지 못한 채 sed를 사용하여 많은 변형을 시도했습니다. 최근 예:

sed -i -r 's/Background.Delay:[[:space:]]+1/Background.Delay: 0/' ~/.ideskrc

저는 단지 주니어 스크립터이므로 확실히 도움이 필요합니다. 감사해요.

이제 최종 버전에는 관심 있는 모든 사람을 위해 야드 형식과 수정된 메시지가 제공됩니다.

if ! grep -q "$STRING" $HOME/.ideskrc;
then
        sed -i 's/^\([[:blank:]]*Background\.Delay:\).*/\1 0/' "$HOME/.ideskrc"
yad --timeout=3 --no-buttons --geometry 500x100 --text-align=center --text="
<b>Rotate Backgrounds has been disabled to avoid conflict.</b>
"
fi

답변1

:행 뒤의 값을 삭제하고 무조건 삽입하고 싶고 , 행의 맨 처음에 0문자열이 나타난다고 가정해 보겠습니다 .Background.Delay:

sed -i 's/^\([[:blank:]]*Background\.Delay:\).*/\1 0/' "$HOME/.ideskrc"

또는

sed -i '/^[[:blank:]]*Background\.Delay:/ s/:.*/: 0/' "$HOME/.ideskrc"

이것은 홈 디렉토리에 있는 파일의 모든 줄 시작 부분에서 리터럴 문자열을 찾고 Background.Delay:, 그 앞에는 임의의 수의 탭이나 공백(이들은 유지됩니다)이 올 수 있으며, 뒤에 오는 모든 것을 제거하고 공백 뒤에 삽입합니다..ideskrc:0

구현에서 위에 표시된 옵션 sed사용을 지원하는 경우 (참조-ised -i(제자리에서 편집)를 사용하여 이식성을 달성하는 방법은 무엇입니까?).

관련 정보