파일에 날짜 추가

파일에 날짜 추가

텍스트 한 줄이 포함된 파일이 있습니다. 편집기를 사용하지 않고 어떻게 내용을 수정할 수 있나요 vi?

예는 다음과 같습니다.

PROCESS DATE =2014-08-01

2014-08-01다음 날에 날짜를 추가하고 싶습니다 . 내 생각은 변수를 만드는 것입니다. 어떻게 해야 하나요?

답변1

당신이 사용할 수있는 perl:

perl -MTime::Piece -pi -e 's/\d{4}-\d\d-\d\d/
 (Time::Piece->strptime($&,"%Y-%m-%d")+24*60*60)->date/ge' file

파일의 모든 날짜가 증가합니다.

답변2

나는 다음과 같이 쓸 것이다:

increment_date() {
    local current=$(grep -oP 'PROCESS DATE =\K.+' file)
    local next=$(date -d "$current + 1 day" +%F)
    sed -i "/PROCESS DATE =/s/$current/$next/" file
}

cat file
increment_date
cat file
increment_date
cat file
PROCESS DATE =2012-02-28
PROCESS DATE =2012-02-29
PROCESS DATE =2012-03-01

이는 PROCESS DATE 줄이 파일에 한 번만 나타나고 그 자체로 한 줄을 차지한다고 가정합니다.

답변3

필요한 복잡성 수준에 따라 다릅니다. 필요한 것이 a 01로 변경 02다음과 같은 것을 사용할 수 있습니다.

sed -i 's/01/02/' file

또는

perl -i -pe 's/01/02/' file

또는 안전을 위해 01줄 끝에 있을 때만 다음을 수행하세요.

sed -i 's/01$/02/' file
perl -i -pe 's/01$/02/' file

이 플래그로 인해 위의 두 솔루션 모두 원본 파일을 수정합니다 -i.

2014-02-28실제 날짜(예: 증가분) 를 고려해야 하는 경우 2014-03-01날짜를 구문 분석하거나 다음을 사용할 수 있는 본격적인 프로그래밍 언어를 사용해야 합니다 date.

$ while IFS='=' read -r text date; do 
    echo "$text=$(date -d "$date + 1 day" +%F)"; 
  done < file > new_file

위의 내용은 입력 라인을 분할하여 =이전 부분을 as로 저장하고 나머지 부분을 as로 저장합니다. 그런 다음 날짜 추가와 같은 멋진 날짜 작업을 수행할 수 있는 명령에 입력하고 원하는 형식으로 인쇄합니다(이 경우 형식은 형식을 의미함). 이는 GNU 날짜를 가정한 것입니다.=$text$date$datedate%FYear-Month-Day

echo명령은 내용을 인쇄 $text한 다음 하루씩 증가한 날짜를 인쇄합니다. =파일의 한 줄에 여러 줄이 있으면 이 작업이 실패합니다.

답변4

내 거날짜 도구dadd텍스트 파일을 반복하고 발견된 각 날짜에 무언가를 추가하는 명령줄 도구를 제공합니다 .

$ dadd -S +1d FILE
PROCESS DATE =2014-08-02

관련 정보