用 SED 或 AWK(或任何有效的方法)替换日期 - Linux 正则表达式

Replacing dates with SED or AWK (or whatever works) - Linux regex

我要转换:

Charlie answered 9 years ago
random text
Kevin answered 4 months ago

为此:

Charlie answered around March 2006
random text
Kevin answered around November 2014

使用以下代码:

date "+%B %Y" --date="9 years ago"

是我 2006 年 3 月 的来源。

我是否应该使用 for 循环,因为我将使用其中有 10 个以上日期的实例 "answered ______ ago"

推荐哪个程序? Sed、awk,还有吗?

谢谢,我正在为一位想要研究雅虎问答准确性的教授做这件事,我将非常感谢您的帮助。

在 BASH 中进行:

while read -r line; do
   [[ $line != *answered* ]] && echo "$line" && continue
   date "+${line/answered */answered} around %B %Y" -d "${line#* answered }"
done < file

输出:

Charlie answered around March 2006
random text
Kevin answered around November 2014
$ cat tst.awk         
/answered/ && match([=10=],/[0-9]+[[:space:]]+[[:alpha:]]+[[:space:]]+ago/) {
    cmd = "date \"+%B %Y\" --date=\"" substr([=10=],RSTART,RLENGTH) "\""
    if ( (cmd | getline date) > 0 ) {
        [=10=] = substr([=10=],1,RSTART-1) "around " date
    }
    close(cmd)
}
{ print }

$ awk -f tst.awk file
Charlie answered around March 2006
random text
Kevin answered around November 2014

再来一张awk

awk -F"answered " 'NF>1{"date \"+%B %Y\" --date=\"""\"" | getline t;=FS "around "t}1' file
Charlie  answered around March 2006
random text
Kevin  answered around November 2014