任何人都可以建議如何在linux上搜索代字符之間的某些數據。我需要獲得IP數據,但它的形成如下。需要抓取中間代字符之間的數據
Details:
20110906000418~118.221.246.17~DATA~DATA~DATA
任何人都可以建議如何在linux上搜索代字符之間的某些數據。我需要獲得IP數據,但它的形成如下。需要抓取中間代字符之間的數據
Details:
20110906000418~118.221.246.17~DATA~DATA~DATA
echo "20110906000418~118.221.246.17~DATA~DATA~DATA" | cut -d'~' -f2
這使用cut
命令設置爲~
的分隔符。然後-f2
開關輸出第二個字段。
如果你給的文字是在一個文件中(稱爲filename
),嘗試:
grep "[0-9]*~" filename | cut -d'~' -f2
隨着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 }'
一個更:
echo '20110906000418~118.221.246.17~DATA~DATA~DATA' | sed -r 's/[^~]*~([^~]+)~.*/\1/'
在AWK:
echo '20110906000418~118.221.246.17~DATA~DATA~DATA' | awk -F~ '{print $2}'
一個,用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
只需使用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