[英]Shell script to get count of a variable from a single line output
如何从以下输出中获取@字符的计数。 我用过tr
命令提取了吗? 我很想知道什么是最好的方法? 我的意思是做同一件事的其他方式。
{running_device,[test@01,test@02]},
我的解决方案是:
echo '{running_device,[test@01,test@02]},' | tr ',' '\n' | grep '@' | wc -l
我认为使用起来更简单:
echo '{running_device,[test@01,test@02]},' | tr -cd @ | wc -c
这对我来说产生2(在Mac OS X 10.7.5上测试)。 tr
的-c
选项表示(指定字符集的)“补码”, -d
表示“删除”,以便删除每个非@
字符,并且wc
计数提供的内容(没有换行符,因此行数为0 ,但字符数为2)。
您的方法没有错。 这是其他几种方法:
echo $(echo {running_device,[test@01,test@02]}, |awk -F"@" '{print NF - 1}')
要么
echo $((`echo {running_device,[test@01,test@02]} | sed 's+[^@]++g' | wc -c` - 1 ))
我唯一关心的是如果您正在循环运行此命令(例如,对于大文件中的每一行都运行一次)。 如果真是这样,那么执行时间可能会成为问题,因为将外壳程序实用程序串联在一起会产生启动过程的开销,而启动过程可能会很麻烦。 如果是这种情况,那么我建议编写一个纯awk版本来处理整个文件。
这是我个人觉得更直观的另一种方法:使用grep仅提取匹配的字符,然后计算grep的输出行。 例如:
echo '{running_device,[test@01,test@02]},' |
fgrep --fixed-strings --only-matching @ |
wc -l
结果为2
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.