如何在 bash 中从套接字中 grep 字符串模式



我想创建一个 bash 脚本,从套接字中 grep 特定值

我从套接字获得的数据是这样的:

$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 一起使用吗?

您可以使用

awk

data=$(nc localhost 12000 | awk -F"[.,]" '/GPRMC/ {print $2}')
echo $data
134129

这将连接到localhost上的端口 12000,如果它自动从中获取数据,您可以通过awk sed或其他程序解析它

nc -l  | sed -n 's/^$GPRMC(.*)000.*/1/p'

只有一个 grep,但肯定需要指定一个更精确的模式限制(如 000,以避免任何字符串更长的字符串,如果字符串中有另一个 000)如果只有前 000 是限制,则 sed 操作需要稍微更改一下

如果 nc -l 的输出不大,并且您希望该值位于变量中,请使用读取循环:

while IFS=., read match GPRMC _; do
    [[ $match = '$GPRMC' ]] && break
done < <(nc -l)
# Value is in "$GPRMC"

注意:如果未找到匹配的行,将使用nc -l输出的最后一行。

你可以尝试这样的东西:

[ ~]$ 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`
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,"&lt=");
                        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: %sn", x, url);
    }
    getch();

nc -l | grep "GPRMC" | sed "s/.GPRMC,//" | sed "s/.000.*//

为你工作?

相关内容

  • 没有找到相关文章

最新更新