단일 대괄호로 시작하고 끝나는 파일 줄에서 캡처하는 방법
나는 이것을 시도 할 것이다
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 file
1) 이전에는 필요하지 않음 grep
2) 더 정확한 정규식 패턴 사용[[^]]\+\]$
$ grep '\[[^]]\+\]$' file
[1006, 1005, 1004, 1003, 1002, 1001]