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、システム内部エラー。この行はリクエストに応じて変更されます。2行目

4

4 に答える 4

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 に答える
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

文字列が という名前の変数$strにあり、文字列に他の星がないと仮定すると*、次のように awk フィルターを使用できます。

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

ここでは、-Fオプションを使用してフィールド セパレータを星に設定し、複数の要素 (1 つ以上の星) を含む行が見つかった場合は、2 番目のフィールドを出力します。

出力:

$ 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
  1. test=":CPL に接続しています... PROCESS CPL CONNECTED... コマンドを入力してください: コマンドを入力してください:RESP:0,CPrL-E1002:RESPMSG,Invalid session ID.; コマンドを入力してください:RESP:0,CPL-E1014:RESPMSG,システム内部エラー; コマンドを入力してください: 外部ホストによって接続が閉じられました."

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

  3. echo ${str:15:100}";"

ここでは、「コマンドを入力してください:」の後に毎回応答文字列が来ると想定しています。100 は、応答文字列の最大長です。

于 2013-08-06T10:38:05.203 に答える