teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

誤記修正

2019/11/25 13:02

投稿

dodox86
dodox86

スコア9416

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

誤記修正

2019/11/25 13:02

投稿

dodox86
dodox86

スコア9416

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}`のような範囲指定を可能としています。`-n`が無いとエラーになります。
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"指定について追記

2019/11/20 02:06

投稿

dodox86
dodox86

スコア9416

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

表中のメタ文字"+"の記述抜け修正

2019/11/20 02:04

投稿

dodox86
dodox86

スコア9416

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

実行例を修正

2019/11/20 01:31

投稿

dodox86
dodox86

スコア9416

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 .DONTCARE<改行>`のようなものでしょう。`sed`コマンドの部分だけを実行してみると以下のようになります。
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 .DONTCARE
21
+ ::ffff:192.168.1.11 DONTCARE submit2/5 DONTCARE
22
- ::ffff:192.168.1.15 DONTCARE submit2/2 .DONTCARE
22
+ ::ffff:192.168.1.15 DONTCARE submit2/2 DONTCARE
23
- ::ffff:192.168.1.20 DONTCARE submit2/1 .DONTCARE
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