在一系列管道Shell命令中进行条件格式转换

时间:2016-08-03 12:36:16

标签: shell awk sed grep pipe

如何添加可选的

iconv -f utf-16 -t latin1

在一系列管道命令中?

假设源文件可以是latin1或utf16。

使用awk,grep等的shell脚本应该可以通过添加可选的转换步骤来处理这两种格式。

如何以最美丽的方式完成,同时尊重DRY原则(不重复其他命令)?

已编辑 -

Curent命令序列如下:

awk '...' $1 | cut ... | colorize

1 个答案:

答案 0 :(得分:1)

效率不高,但以下内容可轻松在管道中设置条件命令。诀窍是从各种备用命令中进行选择,以便始终运行

opt_condtion=true;    #true run extra command, false not to

first_command | ( $opt_condition && ( optional_command || true ) || cat ) | third_command

如果 optional_command 返回非零退出代码作为额外的 cat ( optional_command || true )确保 cat 不会运行可能会挂起流水线命令。

使用完整(子壳)可以让你获得很大的自由。如果命令过于复杂,则将它们放在一个函数中以保持管道简单。