0

嗨,我查看了其他问题并尝试了一些事情,但我无法解决它。

我的字符串是

:CONNECTING TO CPL... PROCESS CPL CONNECTED... Enter command: Enter
command:RESP:0,CPrL-E1002:RESPMSG,Invalid session ID.; Enter
command:RESP:0,CPL-E1014:RESPMSG,System internal error; Enter command:
Connection closed by foreign host.

我怎样才能走RESP:0,CPL-E1014:RESPMSG,System internal error;这条线?还有 RESP:0,CPL-E1014:RESPMSG,系统内部错误;此行将根据请求更改。所以我只能从 RESP: 到 ; 第二行

4

4 回答 4

0
  1. test=":CONNECTING TO CPL... PROCESS CPL CONNECTED... Enter command: Enter command:RESP:0,CPrL-E1002:RESPMSG,Invalid session ID.; Enter command:RESP:0,CPL-E1014:RESPMSG,系统内部错误;输入命令:连接被外部主机关闭。”

  2. str=echo $test | cut -d";" -f2

  3. 回声 ${str:15:100}";"

在这里,我假设您的响应字符串每次都出现在“输入命令:”之后。100 是响应字符串的最大长度。

于 2013-08-06T10:38:05.203 回答
0

假设字符串位于名为 的变量中$str,并且字符串中没有其他星号*,则可以使用 awk 过滤器,如下所示:

awk -F\* 'NF>1{print $2}' <<< "$str"

在这里,我们使用-F选项将字段分隔符设置为星号,如果我们发现一行包含多个元素(一个星号或更多),我们打印第二个字段。

输出:

$ echo "$str"
:CONNECTING TO CPL... PROCESS CPL CONNECTED... Enter command: Enter
command:*RESP:0,CPrL-E1002:RESPMSG,Invalid session ID.;* Enter
command:AREE:0,CPL-E1014:RESPMSG,System internal error; Enter command:
Connection closed by foreign host.
$
$ awk -F\* 'NF>1{print $2}' <<< "$str"
RESP:0,CPrL-E1002:RESPMSG,Invalid session ID.;
于 2013-08-05T11:50:34.070 回答
0

尝试仅使用执行此操作:

$ grep -oP 'command:\KRESP:.*?System internal error;' test.txt
RESP:0,CPL-E1014:RESPMSG,System internal error;
于 2013-08-05T18:15:16.243 回答
0

你可以使用 expr 和正则表达式,请先参考这个答案。看看这段代码:

#!/bin/bash
# foo.sh

# Searches the string for a "RESP:#" message, the # sign is a digit.

string='CONNECTING TO CPL... PROCESS CPL CONNECTED... Enter command:RESP:0,CNDB-0,CPL-0,EMA-0:RESPMSG,success; Enter command: Enter command:
RESP:1,CPL-0,EMA-0:RESPMSG,success; Enter command: Connection closed by foreign host'
regex='RESP\:[0-9]\,CPL\-0\,EMA\-0\:RESPMSG\,[a-zA-Z0-9]*\;'

line=`expr "$string" : '.*\(RESP\:[0-9]\,CPL\-0\,EMA\-0\:RESPMSG\,[a-zA-Z0-9]*\;\)'` # Search the string for the desired line.
respCode=${line:5:1} # Extract RESP:# value using substring...
respMessage=${line:27}
echo $line
echo 'Received response code : '$respCode
echo 'Received response message : '$respMessage
于 2013-08-05T18:08:32.280 回答