将sed一行命令转换为perl

4

我在我的Perl脚本中使用这个sed一行命令。然而,是否有一种方式(我确定有)可以在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 中完成它。因此,在我的 Perl 脚本中,我最终调用了这个 sed 命令。

我不是在寻找 Perl 脚本,而是一行命令。

谢谢。


3
到目前为止,你尝试了什么?perl -pe's/:\n/: /'没有起作用吗? - amon
我不会发布输出,但s2p ':a; N; $!ba; s/:\n/: /g'很有趣:s2p - sed转perl翻译器 - glenn jackman
就此而言,您原始的 sed 命令可以简化为 '1 ! {N; s/:\n/: /g}''/^#/ {N; s/:\n/: /g}' - Darren Bishop
2个回答

9
这个 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

需要使用 e 开关才能直接在命令行中编写命令,这里用于什么? - aelor
2
它在这里用于相同的目的。使用-e尝试上面的命令,你就会知道。 - anubhava
使用“-e”不会打印任何内容,文件也不会更改 - aelor
1
@aelor 这是一个写在 '...' 内的 Perl 代码。这就是 Perl 的魅力所在。 - Sabuj Hassan

2

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

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

如果您想在屏幕上输出内容,则使用以下代码:
perl -pe 's/\n$/ /g if /^#/gm' all_log1.txt

但是您的原始文件已更改。您可以打开并检查。 - aelor
如果您想立即打印结果,则可以使用“-pe”标志。 - aelor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接