一个Shell脚本用于模拟wc命令及其选项?

时间:2017-05-12 14:24:39

标签: linux bash shell unix sed

我们必须编写 shell脚本 程序,该程序与wc命令类似。 收到-l-c-w作为选项。

除了Shell脚本语法;我可以使用wc -c或{{1 }或wc -l; 如果是 那么如何?

IMP:请勿在脚本中使用wc -w

1 个答案:

答案 0 :(得分:3)

如果你可以使用grep,那么模拟行数很容易:只计算匹配的东西总是会发生多少次:

grep -c '^' filename

这应该与wc -l输出相同(但如果文件没有以换行符结尾,它可能会再报告一行)。

要获得单词数,您可以使用以下管道:

grep -o '[^[:space:]]\+' filename | grep -c '^'

您需要grep支持-o选项,该选项会将每个匹配的字符串打印到自己的行中。该表达式匹配所有非空间序列,并将它们组合成我们在前一种情况下使用的内容,只计算它们。

要获取字符数(wc -c),您可以使用

LC_ALL=C grep -o . filename | grep -c '^'

如果您的语言环境支持UTF-8,则需要设置LC_ALL,否则您需要计算wc -m。您需要在输出编号中添加换行符的数量,所以

echo $(( $( grep -c '^' filename ) 
         + $( LC_ALL=C grep -o . filename | grep -c '^' ) ))