단일 대괄호로 시작하고 끝나는 파일 줄에서 캡처하는 방법

단일 대괄호로 시작하고 끝나는 파일 줄에서 캡처하는 방법

단일 대괄호로 시작하고 끝나는 파일 줄에서 캡처하는 방법

나는 이것을 시도 할 것이다

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]

관련 정보