簡體   English   中英

計算字符串中出現的次數。 的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

美觀而簡單,無需sedawkcut

那這個呢:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM