任何人都可以建议如何在linux上搜索波形符号之间的某些数据。我需要获取IP数据,但它的形成如下所示。
Details:
20110906000418~118.221.246.17~DATA~DATA~DATA
答案 0 :(得分:1)
echo "20110906000418~118.221.246.17~DATA~DATA~DATA" | cut -d'~' -f2
这使用cut
命令,并将分隔符设置为~
。然后-f2
开关只输出第二个字段。
如果您提供的文字位于文件(称为filename
)中,请尝试:
grep "[0-9]*~" filename | cut -d'~' -f2
答案 1 :(得分: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 }'
答案 2 :(得分:1)
还有一个:
echo '20110906000418~118.221.246.17~DATA~DATA~DATA' | sed -r 's/[^~]*~([^~]+)~.*/\1/'
答案 3 :(得分:1)
在awk中:
echo '20110906000418~118.221.246.17~DATA~DATA~DATA' | awk -F~ '{print $2}'
答案 4 :(得分: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
答案 5 :(得分:0)
另外一个,使用perl:
$ perl -F~ -lane 'print $F[1]' <<< '20110906000418~118.221.246.17~DATA~DATA~DATA'
118.221.246.17
击:
#!/bin/bash
IFS='~'
while read -a array;
do
echo ${array[1]}
done < ip
如果string是常量,则以下参数扩展执行子串提取:
$ 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