linux - 如何从一行的开头获取正则表达式并将其复制到下一行的开头?
问题描述
我正在编写一个脚本,该脚本将文本从 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((.*))/\2,\1/
}
}
但这似乎无济于事,即使对正则表达式进行了测试以确保它们与我所追求的相匹配。我在这里做错了什么还是有更好的方法来做到这一点?
解决方案
这可能对您有用(GNU sed):
sed -E 'N;/\n".. .. .."/!s/^([^,]+,).*\n/&\1/;P;D' file
附加以下行,它不以日期开头,插入上一行日期,打印/删除上一行并重复。
推荐阅读
- javascript - reactJs中如何检测包含特定类的子节点?
- c# - 如何在 EF Core 中使用动态数量的参数构造原始 SQL 查询
- scala - 有没有办法在 Spark 2.1.3 mllib (Scala) 决策树分类器模型中提取根节点的列标签?
- java - Firebase:不支持序列化数组
- jquery - 执行多个 JQuery 函数不起作用
- sql - 在 SQL Azure 上执行相同的简单选择语句或存储过程需要很长时间或超时
- python - Kivy 上的 Firebase (JSON) 数据库是否可行?
- python - 在 VSCode 中禁用 python 导入排序
- docker - docker-machine 看不到本地 docker
- javascript - 使用 getDownloadURL() 从 firebase 存储加载图像不起作用