Linux에 텍스트 파일이 있는데 awk를 사용하여 날짜 부분을 변경하고 현재 날짜를 입력하고 싶습니다. 물론 제가 이것을 썼고 작동하지만 수동으로 날짜를 지정해야 합니다. 제가 원하는 것은 자동으로 오늘 날짜를 바꾸는 것입니다.
암호:
awk '{gsub(/ISODate\(\"[0-9][0-9][0-9][0-9][-][0-9][0-9][-][0-9][0-9]/,"ISODate(\"2022-10-02");print}' rasoul-02.json
답변1
오늘 날짜를 ISO 형식으로 가져오는 방법에는 여러 가지가 있습니다.
- 외부 명령을 사용하십시오.
date +'%F'
- 쉘 명령을 사용하십시오:
printf '%(%F)T\n' -1
- 일부 awk 버전에서는:
strftime("%F")
가장 다재다능한(휴대용) 솔루션은 다음을 사용하는 것입니다 date
.
awk '{gsub(/ISODate\([0-9]{4}([-][0-9]{2}){2}\)/,"ISODate("isodate")")}1
' isodate=$(date +'%F') rasoul-02.json
쉘의 내부 날짜 형식을 사용하는 가능한 솔루션은 다음과 같습니다.
$ printf -v isodate '%(%F)T' '-1';
$ awk '{gsub(/ISODate[(]["][0-9]{4}([-][0-9]{2}){2}["][)]/,"ISODate(===\""isodate"\")")}1
' isodate=$isodate rasoul-02.json
그리고 strftime
GNU awk(및 기타 몇 가지)의 기능을 사용하십시오.
awk '{ gsub( /ISODate[(]["][0-9]{4}([-][0-9]{2}){2}["][)]/ , "ISODate(\"" strftime("%F") "\")" )}1
' rasoul-02.json
답변2
awk
날짜를 변수로 전달할 수 있습니다 .
awk -v date="$(date +%F)" '{gsub(/ISODate\("[0-9][0-9][0-9][0-9][-][0-9][0-9][-][0-9][0-9]/,"ISODate(\""date"\"");print}'
GNU awk()를 사용할 수 있다면 gawk
정규식을 크게 단순화할 수도 있습니다.
gawk -v date="$(date +%F)" '{
gsub(/ISODate\("[0-9]{4}-[0-9]{2}-[0-9]{2}/,"ISODate(\""date);
print
}' rasoul-02.json
그러나 이것은 모두 아주 나쁜 생각이다. JSON 파일로 작업하는 경우 jq
더 안전하고 간단한 방법으로 이 작업을 수행할 수 있는 유사한 전용 JSON 파서가 있습니다. 더 나은 답변을 제공할 수 있도록 실제 파일을 게시하는 것이 좋습니다.