![](/img/trans.png)
[英]grep a character/word from a string and count number of occurrences in Linux
[英]Count the number of occurrences in a string. Linux
好的,所以我想弄清楚的是如何计算字符串中的句点数,然后将所有内容减到该点,但减去负2。这样的意思是:
string="aaa.bbb.ccc.ddd.google.com"
number_of_periods="5"
number_of_periods=`expr $number_of_periods-2`
string=`echo $string | cut -d"." -f$number_of_periods`
echo $string
result: "aaa.bbb.ccc.ddd"
我想到的方式是将字符串发送到文本文件,然后像这样反复几次:
grep -c "." infile
我不想这样做的原因是因为我不想创建另一个文本文件,因为我没有这样做的权限。 我现在尝试构建的代码也将更加简单。
编辑
我想我没有说清楚,但是我想使周期数更加动态,因为随着脚本的前进,我将要查找的地址将发生变化。
如果您不需要计算点数,只需要删除倒数第二个点,然后再删除所有内容,则可以使用Bash内置的字符串处理方法 。
${string%substring}
从$string
后面删除$substring
最短匹配项。
例:
$ string="aaa.bbb.ccc.ddd.google.com"
$ echo ${string%.*.*}
aaa.bbb.ccc.ddd
美观而简单,无需sed
, awk
或cut
!
那这个呢:
echo "aaa.bbb.ccc.ddd.google.com"|awk 'BEGIN{FS=OFS="."}{NF=NF-2}1'
(通过@steve的有用评论进一步缩短)
给出:
aaa.bbb.ccc.ddd
awk
命令:
awk 'BEGIN{FS=OFS="."}{NF=NF-2}1'
通过将输入行分隔为字段( FS
)来工作.
,然后将它们作为输出( OFS
)加入.
,但字段数( NF
)减少了2。命令中的最后1
负责打印。
通过消除最后两个句点分隔的项,这将减少给定的输入行。
这种方法是“ 不可知的 ” :)
也许这会有所帮助:
#!/bin/sh
input="aaa.bbb.ccc.ddd.google.com"
number_of_fields=$(echo $input | tr "." "\n" | wc -l)
interesting_fields=$(($number_of_fields-2))
echo $input | cut -d. -f-${interesting_fields}
grep -o "\." <<<"aaa.bbb.ccc.ddd.google.com" | wc -l
5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.