날짜가 여러 번 포함된 텍스트 파일이 있습니다. 모든 날짜는 형식으로 작성됩니다 Mon-DD-YYYY
. 현재 날짜의 모든 날짜를 업데이트하고 형식을 유지해야 합니다 Mon-DD-YYYY
.
스크립팅 언어는 , , 내장 함수 등과 특정 날짜 형식을 일치시키는 bash
방법을 모른다는 것이 큰 문제입니다.sed
awk
bash
저 좀 도와 주 시겠어요?
답변1
current_date=$(date +"%m-%d-%Y")
원하는 날짜를 설정 하고 실행하세요.
sed -i.bak "s/[0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\}/$current_date/g" your_file.txt
이렇게 하면 파일의 모든 날짜를 일치시키고 현재_날짜로 바꿀 수 있습니다.
sed
이 경우 명령은 다음과 같이 작동합니다 sed "s/tobereplace/replacement/g"
. 마지막은 g
전역을 나타냅니다. 즉, tobeplace 패턴이 발생할 때마다 교체로 대체된다는 의미입니다.
정규식 패턴을 대체하는 데 사용됩니다.[0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\}
사용된다는 뜻이다.
[0-9]
0에서 9 사이의 임의의 숫자\{2\}
두 배- 하이픈
- 또 똑같아, 또 똑같아, 하지만 네 번이나
\{4\}
편집하다: FelixJN이 의견에서 언급했듯이 날짜 명령에서 %b를 사용하고 정규식의 첫 번째 부분을 다음과 같이 바꿀 수 있으므로 월을 문자열로 원할 것입니다.
current_date=$(date "+%b-%d-%Y")
sed -Ei "s/[A-Z][a-z]\{2\}-[0-9]\{2\}-[0-9]\{4\}/$current_date/g" your_file.txt
이 경우 정규식은 다음과 같이 작동합니다.
[A-Z]
A부터 Z까지의 모든 대문자와 일치합니다.[a-z]\{2\}
a부터 z까지의 모든 소문자를 두 번 일치시킵니다.
나머지는 위에서 언급한 것과 동일
답변2
사용행복하다(이전 Perl_6)
숫자(2자리) 월로 시작하는 경우:
~$ raku -pe 's:g/ \d**2 \- \d**2 \- \d**4 /{Date.today.mm-dd-yyyy("-")}/;' file
알파벳(3자) 월로 시작하는 경우:
~$ raku -pe 'BEGIN my %h = [Z=>] 1..12, <Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec>; \
s:g/ <{%h.values}> \- \d**2 \- \d**4 /{ join "-", %h{Date.today.month}, Date.today.day, Date.today.year }/;' file
입력 예:
Delaware Dec-07-1787; Pennsylvania Dec-12-1787; New Jersey Dec-18-1787; Georgia Jan-02-1788;
Connecticut Jan-09-1788; Massachusetts Feb-06-1788; Maryland Apr-28-1788; South Carolina May-23-1788;
New Hampshire Jun-21-1788; Virginia Jun-25-1788; New York Jul-26-1788; North Carolina Nov-21-1789;
Rhode Island May-29-1790; Vermont Mar-04-1791; Kentucky Jun-01-1792; Tennessee Jun-01-1796;
Ohio Mar-01-1803; Louisiana Apr-30-1812; Indiana Dec-11-1816; Mississippi Dec-10-1817;
Illinois Dec-03-1818; Alabama Dec-14-1819; Maine Mar-15-1820; Missouri Aug-10-1821;
Arkansas Jun-15-1836; Michigan Jan-26-1837; Florida Mar-03-1845; Texas Dec-29-1845;
Iowa Dec-28-1846; Wisconsin May-29-1848; California Sep-09-1850; Minnesota May-11-1858;
Oregon Feb-14-1859; Kansas Jan-29-1861; West Virginia Jun-20-1863; Nevada Oct-31-1864;
Nebraska Mar-01-1867; Colorado Aug-01-1876; North Dakota Nov-02-1889; South Dakota Nov-02-1889;
Montana Nov-08-1889; Washington Nov-11-1889; Idaho Jul-03-1890; Wyoming Jul-10-1890;
Utah Jan-04-1896; Oklahoma Nov-16-1907; New Mexico Jan-06-1912; Arizona Feb-14-1912;
Alaska Jan-03-1959; Hawaii Aug-21-1959;
예제 출력:
Delaware Jul-4-2023; Pennsylvania Jul-4-2023; New Jersey Jul-4-2023; Georgia Jul-4-2023;
Connecticut Jul-4-2023; Massachusetts Jul-4-2023; Maryland Jul-4-2023; South Carolina Jul-4-2023;
New Hampshire Jul-4-2023; Virginia Jul-4-2023; New York Jul-4-2023; North Carolina Jul-4-2023;
Rhode Island Jul-4-2023; Vermont Jul-4-2023; Kentucky Jul-4-2023; Tennessee Jul-4-2023;
Ohio Jul-4-2023; Louisiana Jul-4-2023; Indiana Jul-4-2023; Mississippi Jul-4-2023;
Illinois Jul-4-2023; Alabama Jul-4-2023; Maine Jul-4-2023; Missouri Jul-4-2023;
Arkansas Jul-4-2023; Michigan Jul-4-2023; Florida Jul-4-2023; Texas Jul-4-2023;
Iowa Jul-4-2023; Wisconsin Jul-4-2023; California Jul-4-2023; Minnesota Jul-4-2023;
Oregon Jul-4-2023; Kansas Jul-4-2023; West Virginia Jul-4-2023; Nevada Jul-4-2023;
Nebraska Jul-4-2023; Colorado Jul-4-2023; North Dakota Jul-4-2023; South Dakota Jul-4-2023;
Montana Jul-4-2023; Washington Jul-4-2023; Idaho Jul-4-2023; Wyoming Jul-4-2023;
Utah Jul-4-2023; Oklahoma Jul-4-2023; New Mexico Jul-4-2023; Arizona Jul-4-2023;
Alaska Jul-4-2023; Hawaii Jul-4-2023;
교체 부품은 {...}
중괄호로 묶인 코드 블록의 raku 코드를 사용하여 교체 날짜를 생성합니다. 참고: 식별 필드에서 위의 코드(두 번째 답변)는 <{%h.values}>
월을 생성하는 데 사용됩니다. <alpha>**3
또는 @GlennJackman의 월 목록(댓글)을 사용할 수도 있습니다 .
Shipley, Samuel. “국가의 연합 가입 날짜 목록.” 브리태니커 백과사전, 2020년 2월 11일,https://www.britannica.com/topic/list-of-US-states-by-date-of-admission-to-the-Union-2130026. 액세스 날짜: 2023년 7월 4일.
https://docs.raku.org/type/Date
https://docs.raku.org/routine/mm-dd-yyyy
https://raku.org