![](/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.