예를 들어 중괄호 안에 많은 단어가 포함된 파일이 있습니다. {test1}, {test2} - grep
이러한 단어를 처리하고 다른 목록을 출력하려면 어떻게 해야 합니까 ?
출력 예:
{test1}
{test2}
나는 이것을 아무 소용이 없도록 시도했습니다.
grep -o {.*} file.xml | sort | uniq
고쳐 쓰다
실제로 - 이것은 작동하는 것 같습니다:
grep -oP '{.*?}' file.xml | sort | uniq
답변1
첫 번째 시도에는 두 가지 문제가 있습니다. {.*}
쉘 확장으로부터 보호해야 하는 특수 문자를 포함합니다. 패턴을 따옴표로 묶습니다. 또한 {.*}
줄에서 대괄호로 구분된 가장 긴 텍스트가 일치하므로 이를 포함하는 줄이 있는 경우 match 로 인해 hello {test1} world {test2} howdy
출력 됩니다 .{test1} world {test2}
.*
test1} world {test2
다음은 대괄호 사이에 있는 내용만 출력합니다.
grep -o -e "{[^}]*}"
내 원래 수식은 "{.*}"를 사용하지만 행에서 가장 작은 대괄호 대신 가장 넓은 대괄호를 찾는 것이 반환됩니다.