条件查找和替换sed

时间:2017-07-18 02:53:14

标签: sed pattern-matching

我有一个包含数千个银行交易的文本文件,我需要根据在另一行交易中找到的文本搜索和替换文本。每笔交易都列为......

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进行查找和替换但是如何根据顶线上的模式匹配进行此操作?

2 个答案:

答案 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建议的更强大的解决方案,那么您必须对结果进行区分并确保不会破坏其他内容。