![각 문장 끝에 [xxx][xxxx] 패턴이 있는 패턴을 추출하는 방법](https://linux55.com/image/177908/%EA%B0%81%20%EB%AC%B8%EC%9E%A5%20%EB%81%9D%EC%97%90%20%5Bxxx%5D%5Bxxxx%5D%20%ED%8C%A8%ED%84%B4%EC%9D%B4%20%EC%9E%88%EB%8A%94%20%ED%8C%A8%ED%84%B4%EC%9D%84%20%EC%B6%94%EC%B6%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
다음과 같은 문장이 포함된 파일이 있습니다.
..........[xxxx][xxxx]
..........[xxxx][xxxx]
..........[xxxx][xxxx]
각 문장 끝에 [][]가 2개 있습니다. [][] 및 [][]의 해당 내용을 새 파일로 추출하는 방법은 다음과 같습니다.
[xxxx][xxxx]
[xxxx][xxxx]
[xxxx][xxxx]
나는 성공하지 못한 채 터미널 정규식을 시도했습니다. 감사해요,
답변1
grep
grep
GNU(또는 이 옵션을 지원하는 다른 도구 -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
캡처된 그룹만 출력에 남습니다.