如何从一行的开头获取正则表达式并将其复制到后续行的开头?
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 前一行并重复。
我正在编写一个脚本,该脚本可将 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 前一行并重复。