2011-09-07 31 views

回答

1
echo "20110906000418~118.221.246.17~DATA~DATA~DATA" | cut -d'~' -f2 

這使用cut命令設置爲~的分隔符。然後-f2開關輸出第二個字段。

如果你給的文字是在一個文件中(稱爲filename),嘗試:

grep "[0-9]*~" filename | cut -d'~' -f2 
1

隨着cut

echo "20110906000418~118.221.246.17~DATA~DATA~DATA" | cut -d~ -f2 


隨着awk

echo "20110906000418~118.221.246.17~DATA~DATA~DATA" 
     | awk -F~ '{ print $2 }' 
1

一個更:

echo '20110906000418~118.221.246.17~DATA~DATA~DATA' | sed -r 's/[^~]*~([^~]+)~.*/\1/' 
1

在AWK:

echo '20110906000418~118.221.246.17~DATA~DATA~DATA' | awk -F~ '{print $2}' 
0

一個,用perl:

$ perl -F~ -lane 'print $F[1]' <<< '20110906000418~118.221.246.17~DATA~DATA~DATA' 
118.221.246.17 

的bash:

#!/bin/bash 
IFS='~' 

while read -a array; 
do 
    echo ${array[1]} 
done < ip 

如果字符串是恆定的,下面的參數擴展執行子串的提取:

$ a=20110906000418~118.221.246.17~DATA~DATA~DATA 
$ echo ${a:15:14} 
118.221.246.17 

,或者使用在bash正則表達式:

$ echo $(expr "$a" : '[^~]*~\([^~]*\)~.*') 
118.221.246.17 

最後一個,再次使用純的bash方法:

$ tmp=${a#*~} 
$ echo $tmp 
118.221.246.17~DATA~DATA~DATA 
$ echo ${tmp%%~*} 
118.221.246.17 
1

只需使用bash

$ string="20110906000418~118.221.246.17~DATA~DATA~DATA" 
$ echo ${string#*~} 
118.221.246.17~DATA~DATA~DATA 
$ string=${string#*~} 
$ echo ${string%%~*} 
118.221.246.17 
相關問題