回答編集履歴
5
誤記修正
answer
CHANGED
@@ -27,7 +27,7 @@
|
|
27
27
|
2,192.168.1.15
|
28
28
|
1,192.168.1.20
|
29
29
|
```
|
30
|
-
尚、`sed`コマンド自体のオプション指定の`-nr`ですが、少なくとも**GNU**版`sed`をお使いなのでしょう。`-n`は`sed`内`s`コマンド中の`p`オプション`s/置換元/置換先/p`と組み合わせることで置換した文字列のみを出力するようにしています。`-r`は拡張正規表現をスクリプト中に許すもので、本質問で言えばIPv4アドレス相当の文字列中`[0-9]{1,3}`のような範囲指定を可能としています。`-r`が無いとエラーになります。
|
30
|
+
尚、`sed`コマンド自体のオプション指定の`-nr`ですが、少なくとも**GNU**版`sed`をお使いなのでしょう。`-n`は`sed`内`s`コマンド中の`p`オプション`s/置換元/置換先/p`と組み合わせることで置換した文字列のみを出力するようにしています。`-r`は拡張正規表現をスクリプト中に許すもので、本質問で言えばIPv4アドレス相当の文字列中`[0-9]{1,3}`のような~~範囲~~繰り返し回数指定を可能としています。`-r`が無いとエラーになります。
|
31
31
|
```
|
32
32
|
GNU sed 4.4 について、man sed でのオプション説明抜粋
|
33
33
|
-E, -r, --regexp-extended
|
4
誤記修正
answer
CHANGED
@@ -27,7 +27,7 @@
|
|
27
27
|
2,192.168.1.15
|
28
28
|
1,192.168.1.20
|
29
29
|
```
|
30
|
-
尚、`sed`コマンド自体のオプション指定の`-nr`ですが、少なくとも**GNU**版`sed`をお使いなのでしょう。`-n`は`sed`内`s`コマンド中の`p`オプション`s/置換元/置換先/p`と組み合わせることで置換した文字列のみを出力するようにしています。`-r`は拡張正規表現をスクリプト中に許すもので、本質問で言えばIPv4アドレス相当の文字列中`[0-9]{1,3}`のような範囲指定を可能としています。`-
|
30
|
+
尚、`sed`コマンド自体のオプション指定の`-nr`ですが、少なくとも**GNU**版`sed`をお使いなのでしょう。`-n`は`sed`内`s`コマンド中の`p`オプション`s/置換元/置換先/p`と組み合わせることで置換した文字列のみを出力するようにしています。`-r`は拡張正規表現をスクリプト中に許すもので、本質問で言えばIPv4アドレス相当の文字列中`[0-9]{1,3}`のような範囲指定を可能としています。`-r`が無いとエラーになります。
|
31
31
|
```
|
32
32
|
GNU sed 4.4 について、man sed でのオプション説明抜粋
|
33
33
|
-E, -r, --regexp-extended
|
3
sedのオプション"-nr"指定について追記
answer
CHANGED
@@ -26,4 +26,12 @@
|
|
26
26
|
5,192.168.1.11
|
27
27
|
2,192.168.1.15
|
28
28
|
1,192.168.1.20
|
29
|
+
```
|
30
|
+
尚、`sed`コマンド自体のオプション指定の`-nr`ですが、少なくとも**GNU**版`sed`をお使いなのでしょう。`-n`は`sed`内`s`コマンド中の`p`オプション`s/置換元/置換先/p`と組み合わせることで置換した文字列のみを出力するようにしています。`-r`は拡張正規表現をスクリプト中に許すもので、本質問で言えばIPv4アドレス相当の文字列中`[0-9]{1,3}`のような範囲指定を可能としています。`-n`が無いとエラーになります。
|
31
|
+
```
|
32
|
+
GNU sed 4.4 について、man sed でのオプション説明抜粋
|
33
|
+
-E, -r, --regexp-extended
|
34
|
+
|
35
|
+
use extended regular expressions in the script (for portability
|
36
|
+
use POSIX -E).
|
29
37
|
```
|
2
表中のメタ文字"+"の記述抜け修正
answer
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|7| .+|1文字スペース、続いて任意の文字が1文字以上|
|
11
11
|
|8|submit2|"submit2"|
|
12
12
|
|9|/|"/"|
|
13
|
-
|10|([0-9]+)|"0"から"9"の1文字(※第2グループ)|
|
13
|
+
|10|([0-9]+)|"0"から"9"の文字が1文字以上(※第2グループ)|
|
14
14
|
|11| .+$|1文字スペース、続いて任意の文字が1文字以上続き、行末まで|
|
15
15
|
|
16
16
|
で、第1グループであるIPv4アドレス、第2グループのNo(?っぽいもの)を抜き出します。それを`\2,\1/p`部分で"第2グループ,第1グループ"の並びにし、`p`により出力。`|sort`で`sort`コマンドにパイプで繋げてソートして出力。更に`|uniq`で`uniq`コマンドにパイプで繋げて、重複行を削除、です。
|
1
実行例を修正
answer
CHANGED
@@ -15,12 +15,12 @@
|
|
15
15
|
|
16
16
|
で、第1グループであるIPv4アドレス、第2グループのNo(?っぽいもの)を抜き出します。それを`\2,\1/p`部分で"第2グループ,第1グループ"の並びにし、`p`により出力。`|sort`で`sort`コマンドにパイプで繋げてソートして出力。更に`|uniq`で`uniq`コマンドにパイプで繋げて、重複行を削除、です。
|
17
17
|
|
18
|
-
対象とする行データは、`::ffff:192.168.1.11 DONTCARE submit2/5
|
18
|
+
対象とする行データは、`::ffff:192.168.1.11 DONTCARE submit2/5 DONTCARE<改行>`のようなものでしょう。`sed`コマンドの部分だけを実行してみると以下のようになります。
|
19
19
|
```bash
|
20
20
|
$ cat data.txt
|
21
|
-
::ffff:192.168.1.11 DONTCARE submit2/5
|
21
|
+
::ffff:192.168.1.11 DONTCARE submit2/5 DONTCARE
|
22
|
-
::ffff:192.168.1.15 DONTCARE submit2/2
|
22
|
+
::ffff:192.168.1.15 DONTCARE submit2/2 DONTCARE
|
23
|
-
::ffff:192.168.1.20 DONTCARE submit2/1
|
23
|
+
::ffff:192.168.1.20 DONTCARE submit2/1 DONTCARE
|
24
24
|
|
25
25
|
$ sed -rn 's/^\:\:ffff\:([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) .+submit2/([0-9]+) .+$/\2,\1/p' data.txt
|
26
26
|
5,192.168.1.11
|