shell提取字符串中的字母,數字和小數


有時爬蟲中提取的文本中存在大量的&nbsp,這些顯示為空格,但是無法用 "\r" "\t" 或者 [space] 空格進行替換,這些文本在運算中會報錯,因此需要提取其中的數字和字母。

此類問題的報錯信息通常為標准輸入不合法的字符,例如:

(standard_in) 1: illegal character: \302

(standard_in) 2: syntax error

 

從字符串中提取數字字母的方法有三,grep命令sed命令和awk均可

sed命令提取字母和數字:使用正則表達式

 1 #/bin/bash
 2 #正則表達式寫在[]里,^代表非
 3 echo " 0ab12 AB34 Cc " | sed 's/[^0-9]//g'
 4 #輸出 01234
 5 echo " 0ab12 AB34 Cc " | sed 's/[^a-z]//g'
 6 #輸出 abc
 7 echo " 0ab12 AB34 Cc " | sed 's/[^a-zA-Z]//g'
 8 #輸出 abABCc
 9 echo " 0ab12 AB34 Cc " | sed 's/[0-9]//g'
10 #輸出 ” ab AB Cc “,輸出內容包含空格

 

grep命令提取小數:

1 #/bin/bash
2 #轉化為提取小數點兩側的整數
3 echo "  *3.2-& " | grep -oP '\d*\.\d+'
4 #輸出 3.2

 

awk命令提取:按位篩選

注意awk的F選項和雙引號之間有一個空格!!!

 1 #/bin/bash
 2 #awk的F空選項表示按位分析,正則表達式同上
 3 echo 'dsFUs34tg*fs5a%8ar%$#@' | awk -F "" '
 4 {
 5   for(i=1;i<=NF;i++) 
 6   {  
 7     if ($i ~ /[^0-9a-zA-Z]/)         
 8     {
 9       str=$i
10       str1=(str1 str)
11     }  
12   } 
13   print str1
14 }'
15 
16 #輸出 *%%$#@

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM