如何从一行的开头获取正则表达式并将其复制到后续行的开头?

How can I take a regular expression from the beginning of one line and copy it to the beginning of following lines?

我正在编写一个脚本,该脚本可将 pdf 文档中的文本转换为 CSV 格式以备后用。我遇到了一个问题,我需要将附加信息附加到某些行以完成数据,但不知道如何使用 sed 来实现它。文档看起来像这样:

# "date","description","cost","total"
"31 01 19","Purchase from SHOP","1.23","1.23"
"Direct debit to COMPANY","2.34","3.57"
"Purchase from SHOP","3.45","7.02"
"01 02 19","Received from PERSON","1.23","5.79"
"Purchase to SHOP","4.56","10.35"

什么时候应该是这样的:

# "date","description","cost","total"
"31 01 19","Purchase from SHOP","1.23","1.23"
"31 01 19","Direct debit to COMPANY","2.34","3.57"
"31 01 19","Purchase from SHOP","3.45","7.02"
"01 02 19","Received from PERSON","1.23","5.79"
"01 02 19","Purchase to SHOP","4.56","10.35"

如何使用 sed 实现此目的?

我试过:

/^(\"[[:digit:]]{2} [[:digit:]]{2} [[:digit:]]{2}\",)/{
    h
    N
    /^(\"[^\"]*\",\"(0|[1-9][[:digit:]]{,2}(,[[:digit:]]{1,3})*)\.[[:digit:]]{2})\",?{2})/{
        G
        s/((.*))\n((.*))/,/
    }
}

但这似乎没有任何作用,即使对正则表达式进行了测试以确保它们与我所追求的相匹配。 我是不是做错了什么或者有更好的方法吗?

这可能对你有用 (GNU sed):

sed -E 'N;/\n".. .. .."/!s/^([^,]+,).*\n/&/;P;D' file

追加以下行并且它不以日期开头,插入前几行日期,print/delete 前一行并重复。