我想创建一个从套接字grep特定值的bash脚本
我从套接字获取的数据是这样的:
$GPGSV,4,3,14,16,19,14,30,,,25*7834128.000,V,N*4D
$GPRMC,134129.000,V,5309.2672,N,00811.8483,E,0F
$GPGGA,1341299,99.9*09
我希望获取$GPRMC,
和000
我可以使用nc
- sed
命令吗?
答案 0 :(得分:2)
您可以使用awk
data=$(nc localhost 12000 | awk -F"[.,]" '/GPRMC/ {print $2}')
echo $data
134129
这将连接到12000
上的端口localhost
,如果它自动从中获取数据,您可以通过awk
sed
或其他程序
答案 1 :(得分:2)
nc -l | sed -n 's/^\$GPRMC\(.*\)000.*/\1/p'
只有一个grep,但当然需要指定一个更精确的模式限制(如000,以避免任何字符串更长,如果字符串中有另一个000) 如果只有第一个000是限制,那么sed动作需要改变一点
答案 2 :(得分:1)
如果nc -l
的输出不大并且您想要变量中的值,请使用读取循环:
while IFS=., read match GPRMC _; do
[[ $match = '$GPRMC' ]] && break
done < <(nc -l)
# Value is in "$GPRMC"
注意:如果找不到匹配的行,将使用nc -l
输出的最后一行。
答案 3 :(得分:0)
您可以尝试以下方式:
[ ~]$ cat test.txt
$GPGSV,4,3,14,16,19,14,30,,,25*7834128.000,V,N*4D
$GPRMC,134129.000,V,5309.2672,N,00811.8483,E,0F
$GPGGA,1341299,99.9*09
[ ~]$ sed -n 's/.*\$GPRMC,\([0-9]*\)\.000.*/\1/p' test.txt
134129
您也可以使用awk
:
[ ~]$ awk -F "[,.]" '($0 ~ "\\$GPRMC,.*\\.000"){print $2}' test.txt
134129
如果要将命令的结果捕获到变量中:
[ ~]$ var=$(cmd)
[ ~]$ var=`cmd`
答案 4 :(得分:0)
int x = 0, cmp = 0;
char str[]="$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,251114,004.2,W*70";
char *str1;
char url[300];
strcpy (url,"?");
str1 = strtok(str, ",");
cmp = strcmp (str1, &"$GPRMC");
if(cmp == 0)
{
while (x < 12)
{
str1 = strtok(NULL, ",");
if (str1 == NULL)
{
x++;
}
else
{
x++;
switch(x)
{
case 1:
strcat (url,"tm=");
strcat (url,str1);
break;
case 3:
strcat (url,"<=");
strcat (url,str1);
break;
case 5:
strcat (url,"&ln=");
strcat (url,str1);
break;
case 9:
strcat (url,"&dt=");
strcat (url,str1);
break;
}
}
}
strcat (url,"&fl=0");
strcat (url,"&en=0");
printf("%i: %s\n", x, url);
}
getch();
答案 5 :(得分:-1)
会
nc -l | grep "GPRMC" | sed "s/.GPRMC,//" | sed "s/.000.*//
为你工作?