将文本文件中的任何日期更新为当前日期

将文本文件中的任何日期更新为当前日期

我有一个文本文件,其中包含多次出现的日期。所有日期均以格式书写Mon-DD-YYYY。我必须在当前日期中更新所有这些日期,并保持格式Mon-DD-YYYY

脚本语言是bash.一个大问题是我不知道如何将特定格式的日期与sedawkbash内置函数等相匹配。

请问你能帮帮我吗?

答案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

这样,您可以匹配文件中的任何日期并将其替换为 current_date

sed在这种情况下,命令的工作方式类似于:sed "s/tobereplace/replacement/g"。最后的g代表全局,这意味着每次出现的 tobereplace 模式都将被替换所替换。

用于替换正则表达式模式[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 的月份列表(在评论中)。


希普利、塞缪尔. “美国各州加入联邦的日期列表”。大英百科全书,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

相关内容