将sed One-Liner转换为perl

时间:2014-03-29 09:33:42

标签: regex perl bash sed

我在sed脚本中使用此perl一行代码。但是,有没有办法(我确定有)在perl中做同样的工作?

这是我的档案:

$ cat all_log1.txt 
Looking into the table etl_f_gl_balance
# of -1 values in  etl_f_gl_balance.row_key:
0
# of -1 values in  etl_f_gl_balance.ledger_key:
1020
# of -1 values in  etl_f_gl_balance.gl_account_key:
1020
# of -1 values in  etl_f_gl_balance.legal_entity_key:
1020
# of -1 values in  etl_f_gl_balance.cost_center_key:
995
# of -1 values in  etl_f_gl_balance.natural_account_key:
1020
# of -1 values in  etl_f_gl_balance.posting_period_fiscal_key:
5
# of -1 values in  etl_f_gl_balance.posting_period_key:
5

我希望输出如下,这是我的sed解决方案:

$ sed ':a; N; $!ba; s/:\n/: /g' all_log1.txt 
Looking into the table etl_f_gl_balance
# of -1 values in  etl_f_gl_balance.row_key: 0
# of -1 values in  etl_f_gl_balance.ledger_key: 1020
# of -1 values in  etl_f_gl_balance.gl_account_key: 1020
# of -1 values in  etl_f_gl_balance.legal_entity_key: 1020
# of -1 values in  etl_f_gl_balance.cost_center_key: 995
# of -1 values in  etl_f_gl_balance.natural_account_key: 1020
# of -1 values in  etl_f_gl_balance.posting_period_fiscal_key: 5
# of -1 values in  etl_f_gl_balance.posting_period_key: 5

目前,无论我使用什么样的正则表达式组合,我都无法在perl中完成它。因此,我最终在我的sed脚本中调用了这个perl命令。

我不是在寻找一个perl脚本,而是一个单行。

感谢。

2 个答案:

答案 0 :(得分:5)

这个perl单行应该可以工作:

perl -pe 's/:\n$/: /' file
Looking into the table etl_f_gl_balance
# of -1 values in  etl_f_gl_balance.row_key: 0
# of -1 values in  etl_f_gl_balance.ledger_key: 1020
# of -1 values in  etl_f_gl_balance.gl_account_key: 1020
# of -1 values in  etl_f_gl_balance.legal_entity_key: 1020
# of -1 values in  etl_f_gl_balance.cost_center_key: 995
# of -1 values in  etl_f_gl_balance.natural_account_key: 1020
# of -1 values in  etl_f_gl_balance.posting_period_fiscal_key: 5
# of -1 values in  etl_f_gl_balance.posting_period_key: 5

答案 1 :(得分:1)

这个将备份当前文件并更新它:

perl -i.bak -pe 's/\n$/ /g if /^#/gm' all_log1.txt

如果您想在屏幕中输出,请使用以下输出:

perl -pe 's/\n$/ /g if /^#/gm' all_log1.txt