我有一个包含数千个银行交易的文本文件,我需要根据在另一行交易中找到的文本搜索和替换文本。每笔交易都列为......
2016/01/08 * POS DEBIT LOWES #02793* SPOKANE VALLE WA #7522
Expenses:Unknown $289.78
Assets:INB Checking
我需要能够在顶线搜索“降低”'如果文本匹配,则会将费用列更改为费用:建筑材料
所以整个交易都喜欢这样......
2016/01/08 * POS DEBIT LOWES #02793* SPOKANE VALLE WA #7522
Expenses:Building Materials $289.78
Assets:INB Checking
我知道我可以使用sed进行查找和替换但是如何根据顶线上的模式匹配进行此操作?
答案 0 :(得分:0)
您可以使用起始地址并使用sed '/LOWES/{:a;N;/\n[^0-9]/{s/\(Expenses:\).*/\1Building Materials/;P;D;}}' file
命令循环来查找并替换您的模式,直到下一行不以数字开头:
-i
尝试使用sed -i '/LOWES/{:a;N;/\n[^0-9]/{s/\(Expenses:\).*/\1Building Materials/;P;D;}}' file
标记来编辑文件 :
{{1}}
答案 1 :(得分:0)
如果你可以假设每一个LOWES费用都以匹配LOWES的行开头,并以匹配费用的行结束,你可以这样做:
before_action :check_user, except: [:index, :show]
这表示在/ LOWES /到/ Expenses /用'建筑材料'替换'未知'的每一行范围内。
如果您使用这样的简单模式而不是SLePort建议的更强大的解决方案,那么您必须对结果进行区分并确保不会破坏其他内容。