두 스크립트 간의 충돌을 피하기 위해 파일 줄의 값을 변경하고 싶습니다.~/.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
사용을 지원하는 경우 (참조-i
sed -i(제자리에서 편집)를 사용하여 이식성을 달성하는 방법은 무엇입니까?).