1

この 2 種類の出力があります。

UID:474D229F698D494E889D85CEF9303B97:480 f
UID:474D229F698D494E889D85CEF9303B97:480

最後に 480 を持つ 32 文字の長さの uid を取得したいと思います。(2 番目のタイプの入力では 480 の後に何もないことに注意してください) 目的の出力:

474D229F698D494E889D85CEF9303B97:480
474D229F698D494E889D85CEF9303B97:480

私はsedを使用しています:

cat input.txt | sed 's!UID:\(.*\):\([0-9]*\)[\s]*!Captured:\1:\2!'

しかし、出力は次のとおりです。

Captured:474D229F698D494E889D85CEF9303B97:480 f
Captured:474D229F698D494E889D85CEF9303B97:480
4

3 に答える 3

1

これでよろしいですか?

grep -oE '[^:]{32}:[^: ]*' file

例えば:

kent$  echo "UID:474D229F698D494E889D85CEF9303B97:480 f
UID:474D229F698D494E889D85CEF9303B97:480"|grep -oE '[^:]{32}:[^: ]*'
474D229F698D494E889D85CEF9303B97:480
474D229F698D494E889D85CEF9303B97:480

sedと同じ考え:

sed -r 's/.*([^:]{32}:[^: ]*).*/\1/' file
于 2013-07-24T14:17:22.330 に答える
0

awk救助へ?

$ awk -F"[: ]" '{print $2":"$3}' file
474D229F698D494E889D85CEF9303B97:480
474D229F698D494E889D85CEF9303B97:480

説明:: 考えられるさまざまなフィールド区切り文字またはスペースを定義します。テキストが分割されたら、2 番目と 3 番目のフィールドを出力します。

sed方法は次のようになります。

$ sed 's/UID:\([^:]*\):\([^ ]*\).*/Captured:\1:\2/g' file
Captured:474D229F698D494E889D85CEF9303B97:480
Captured:474D229F698D494E889D85CEF9303B97:480

説明: テキストがパターンに基づいていることがわかりますUID:number:number something。したがって、 で取得しUID:\([^:]*\):\([^ ]*\).*ます。\( expression \)必要なテキストをキャプチャして、後で印刷できるようにし\1ます\2...

于 2013-07-24T14:14:04.137 に答える
0

bash では、パラメーター展開を使用できます。

s=${s% *}    # Remove everything after space.
echo ${s#*:} # Remove everything before colon.
于 2013-07-24T14:15:30.260 に答える