如何从以下输出中获取 @ 字符的计数。我使用了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 上测试)。-c
选项表示“tr
补充”(指定字符集)并-d
表示“删除”,以便删除每个非@
字符,并wc
计算提供的内容(没有换行符,因此行数为 0,但字符数为 2 )。
这是另一种我个人觉得更直观的方法:使用 grep 仅提取匹配的字符,然后计算 grep 的输出行数。例如:
echo '{running_device,[test@01,test@02]},' |
fgrep --fixed-strings --only-matching @ |
wc -l
结果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 ))
我唯一担心的是,如果您在循环中运行此命令(例如,大文件中的每一行运行一次)。如果是这种情况,那么执行时间可能是一个问题,因为将 shell 实用程序串在一起会导致启动进程的开销,这可能会很慢。如果是这种情况,那么我建议编写一个纯 awk 版本来处理整个文件。