2017-07-18 3 views
0

と交換してください。各トランザクションは、私は「ローズ」の一番上の行を検索するとテキストが一致した場合、それは費用を経費列を変更しますできるようにする必要があり、このような...条件付き検索と私はそれで銀行取引の何千ものテキストファイルを持っていると私はトランザクションの別の行にあるテキストに基づいてテキストを検索し、交換する必要がSED

2016/01/08 * POS DEBIT LOWES #02793* SPOKANE VALLE WA #7522 
    Expenses:Unknown       $289.78 
    Assets:INB Checking 

としてリストされている:建築材料は

ので、全体のトランザクションは、私は検索と置換を行うにsedを使用することができます知っているが、どのように私がそのように一番上の行のパターンマッチのもと行うことができますか?...このよう

2016/01/08 * POS DEBIT LOWES #02793* SPOKANE VALLE WA #7522 
    Expenses:Building Materials    $289.78 
    Assets:INB Checking 

をしたいと思いますか

+0

あなたはこれらの取引は、間に改行して元のために、分離されている方法を示していた場合、それは良くなりますか? 'awk'がより適しているが、私はどうしたら 'N'コマンドを使用して、あなたの目的のために考えて...任意の分離なしで示したように、トランザクションの間、彼らは継続中で何行がありません – Sundeep

+0

。 – freefly0313

+0

OKうーん..私はあなたの*は何の例 – Sundeep

答えて

0

あなたは数字で始まらない次の行にあなたのパターンを見つけて交換するtコマンドで開始アドレスとループを使用することができます。

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 
0

は、あなただけのこの操作を行うことができます:

sed -e '/LOWES/,/Expenses/s/Unknown/Building Materials/'

これは/ローズ/からの行のすべての範囲内に/費用が/「建材」で「不明」を交換することを言います。

あなたの代わりにSLePortによって提案され、より堅牢なソリューションのこのような単純なパターンを使用している場合、それはあなたが結果をdiffを、あなたが何かをマングルしていないことを確認することが不可欠です。

関連する問題