crontab 줄에 "#" 추가

crontab 줄에 "#" 추가

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$VISUALshperlCODEshLINEperl


분명히 이것은시각적여기서 사용하고 있는 편집기는 $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

관련 정보