嗨,我看了其他问题并试了一些东西,但我无法解决它。
我的字符串是
: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:到;对于第二行
答案 0 :(得分: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.;
答案 1 :(得分:0)
您可以使用expr和正则表达式,请先参考this回答。看看这段代码:
#!/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
答案 2 :(得分:0)
尝试仅使用grep执行此操作:
$ grep -oP 'command:\KRESP:.*?System internal error;' test.txt
RESP:0,CPL-E1014:RESPMSG,System internal error;
答案 3 :(得分:0)
test =“:连接到CPL ... PROCESS CPL CONNECTED ...输入命令:输入命令:RESP:0,CPrL-E1002:RESPMSG,无效的会话ID .;输入命令:RESP:0, CPL-E1014:RESPMSG,系统内部错误;输入命令:外部主机关闭连接。“
STR = echo $test | cut -d";" -f2
echo $ {str:15:100}“;”
这里我假设每次“输入命令:”后都会出现响应字符串。 100表示响应字符串的最大长度。