각 문장 끝에 [xxx][xxxx] 패턴이 있는 패턴을 추출하는 방법

각 문장 끝에 [xxx][xxxx] 패턴이 있는 패턴을 추출하는 방법

다음과 같은 문장이 포함된 파일이 있습니다.

..........[xxxx][xxxx]
..........[xxxx][xxxx]
..........[xxxx][xxxx]

각 문장 끝에 [][]가 2개 있습니다. [][] 및 [][]의 해당 내용을 새 파일로 추출하는 방법은 다음과 같습니다.

[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]

나는 성공하지 못한 채 터미널 정규식을 시도했습니다. 감사해요,

답변1

grepgrepGNU(또는 이 옵션을 지원하는 다른 도구 -o)를 사용하여 이를 시도해 보세요.

grep -o '\[[^]]*\]\[[^]]*\]$' file > new_file

산출:

[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]

답변2

grep을 지원 -o하고 다른 작업은 수행하지 않는 경우 [첫 번째 이후의 모든 것을 원합니다 [.

$ grep -oP '[^]]*\K\[.*' file 
[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]

[원하지 않는 다른 것이 있으면 다음을 시도해 보십시오.

$ grep -oP '.*\K\[.+?\]\[.*' file 
[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]

grep지원이 없다면 -o(나는 믿습니다.그냥 macOS) 다음과 같이 사용할 수 있습니다.

$ sed -E 's/.*(\[.+?\]\[.*)/\1/' file 
[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]

답변3

POSIX sed:

sed 's/.*\(\[[^]]*\]\[[^]]*\]\)$/\1/' file
  • \[[^]]*\]-others [이외의 숫자와 일치합니다 .]]
  • \(\[[^]]*\]\[[^]]*\]\)$\(\)첫 번째이자 유일한 캡처 그룹에 의해 캡처된 줄 끝에 고정된 두 개와 일치합니다 .
  • \1캡처된 그룹만 출력에 남습니다.

관련 정보