Linux 명령을 사용하여 crontab의 줄을 변경해야 합니다. sed 명령을 사용하여 솔루션을 찾을 수 없습니다. 도와주세요? 원래 줄은 다음과 같습니다.
* * * * * root /foo/pluto/minnie.sh
그리고 되어야 한다
#* * * * * root /foo/pluto/minnie.sh
많은 감사
리차드
답변1
무엇에 대해:
crontab -l |sed 's/\(.*minnie\)/#\1/' > tmpfile
crontab tmpfile
rm tmpfile
또는
EDITOR=/usr/bin/ed crontab -e
1
/minnie
s/^/#/
w
q
답변2
perl -pi -le '$_ = "#$@" if $_ eq "* * * * * root /foo/pluto/minnie.sh"' your-file
행의 내용과 정확히 일치하는 옵션입니다.
라인을 변수에 저장할 수도 있습니다.
line='* * * * * root /foo/pluto/minnie.sh'
그런 다음 다음과 같이 사용하십시오.
file=some-file
perl -pi -lse '$_ = "#$_" if $_ -eq $line' -- -line="$line" -- "$file"
또는 환경 변수로 전달됩니다.
export LINE='* * * * * root /foo/pluto/minnie.sh'
perl -pi -le '$_ = "#$_" if $_ -eq $ENV{LINE}' -- "$file"
이를 통합하려면 다음을 수행하십시오 crontab -e
.
LINE='* * * * * root /foo/pluto/minnie.sh' \
VISUAL='perl -pi -le '\''$_ = "#$_" if $_ -eq $ENV{LINE}
'\'' --' crontab -e
또는:
LINE='* * * * * root /foo/pluto/minnie.sh' \
CODE='$_ = "#$_" if $_ -eq $ENV{LINE}' \
VISUAL='perl -pi -le "$CODE" --' crontab -e
그런 다음 공백의 내용과 임시 파일의 이름을 해석으로 사용하여 코드가 실행되고 crontab
둘 다 해당 환경에서 필요한 변수( for , for )를 찾습니다.sh
$VISUAL
sh
perl
CODE
sh
LINE
perl
분명히 이것은시각적여기서 사용하고 있는 편집기는 $VISUAL
우선순위가 더 높으므로 사용하려면 $EDITOR
설정을 해제해야 합니다.$VISUAL
$EDITOR
답변3
sed 명령을 사용하여 해결책을 찾을 수 없습니다
매우 간단합니다. 행 집합을 처리하려면 규칙을 지정하면 됩니다. 규칙은 행을 선택하는 정규식과 해당 행에서 실행할 명령 집합으로 구성됩니다. 예는 다음과 같습니다.
sed '/^abc/ {; s/abc/xyz/g; }' /path/to/input > output
이는 "abc"로 시작하는 줄에서만 작동합니다. 이 모든 줄에서 (그리고 이 줄에서만) 문자열 "abc"는 "xyz"로 변경됩니다.
따라서 줄에 주석을 달고 싶다면 줄의 시작 부분을 octothorpe로 바꾸세요:
sed '/minnie/ {; s/^/# / ; }' /path/to/input > output
주석 처리된 줄 뒤에 새 줄을 추가하려면 "a" 명령을 사용할 수도 있습니다.
sed '/minnie/ {
s/^/# /
a\
this gets inserted after the commented line
}' /path/to/input > output
마지막으로 sed는 출력을 stdout
기본값으로 씁니다. 원본 파일이 손상될 수 있으므로 즉시 원본 파일로 다시 파이프할 수는 없습니다. 또한 "-i" 스위치(예: GNU-sed)와 같은 불쾌한 항목은 피하십시오. 이는 POSIX가 아니며 스크립트의 이식성을 떨어뜨리기 때문입니다. 이렇게 하는 것이 더 안전하고 더 좋습니다.
if sed '<your sed-script>' input > output ; then
mv output input
else
print -u2 - "sed malfunction, check output"
exit 1
fi