単一の角かっこで始まり終わるファイル行からキャプチャする方法

単一の角かっこで始まり終わるファイル行からキャプチャする方法

単一の角かっこで始まり終わるファイル行からキャプチャする方法

私はこれを試してみます

cat file  | grep "\[*\]"

しかし、この構文が良い結果を与えるかどうかはわかりません。

ファイルの例:

cat file

WATCHER::
[1006, 1005, 1004, 1003, 1002, 1001]
Welcome to ZooKeeper!
JLine support is disabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

期待される出力

[1006, 1005, 1004, 1003, 1002, 1001]

答え1

grep '^\[.*\]$' file
  • ^行の先頭に一致します。
  • \[左かっこ一致
  • .*すべての文字、数字(0個以上)と一致します。
  • \]閉じカッコ一致
  • $行末の一致

答え2

より複雑な入力データを含むソースファイル:

$ cat file2
WATCHER::
[1006, 1005, 1004, 1003, 1002, 1001]
Welcome to ZooKeeper!
JLine support is disabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
begin [20, 25, 24, 23, 22, 21] end
begin2 [30, 35, 34, 33,
 32, 31] end2
begin3 [40, 41] middle3 [50, 51, 52] end3
end of file
$

1. シンプルさ

$ grep '\[[^]]*\]' file2
[1006, 1005, 1004, 1003, 1002, 1001]
begin [20, 25, 24, 23, 22, 21] end
begin3 [40, 41] middle3 [50, 51, 52] end3
$

2. 高度

$ cat file2|grep '\[[^[]*\]'|sed 's/^[^[]*\[/[/g;s/][^]]*$/]/g;s/][^[]*\[/] [/g'
[1006, 1005, 1004, 1003, 1002, 1001]
[20, 25, 24, 23, 22, 21]
[40, 41] [50, 51, 52]
$

3. 高度なマルチスレッド

$ sed ':a;N;$!ba;s/^[^[]*\[/[/g;s/][^]]*$/]/g;s/\n//g;s/][^[]*\[/]\n[/g;' file2
[1006, 1005, 1004, 1003, 1002, 1001]
[20, 25, 24, 23, 22, 21]
[30, 35, 34, 33, 32, 31]
[40, 41]
[50, 51, 52]
$

答え3

cat file1) 以前は不要grep
2) より正確な正規表現パターンの使用[[^]]\+\]$

$ grep '\[[^]]\+\]$' file
[1006, 1005, 1004, 1003, 1002, 1001]

関連情報