用 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
我要转换:
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