다음과 같은 줄이 있습니다.
function( "((2 * VAR(\"xxx\")) - VAR(\"yyy\"))" ?name "name" ?plot t ?save t ?evalType 'point)
function("value(res VAR(\"zzz\"))" ?name "othername" ?plot t ?save t ?evalType 'point)
또한 VAR 함수에 정의된 문자열을 출력하는 명령을 찾고 싶습니다. 즉:
xxx yyy
zzz
시도해 보았지만 sed
제가 이해하는 한 탐욕스럽지 않은 방식으로는 할 수 없습니다.
답변1
grep
Perl 호환 정규식(PCRE)을 지원하는 프로그램이 있는 경우 다음을 사용할 수 있습니다.
grep -Po 'VAR\(\\"\K[^\\]*'
또는 (좀 더 대칭적입니다. 뒤돌아보기 및 미리보기를 사용하세요)
grep -Po '(?<=VAR\(\\").*?(?=\\")'
전임자.
$ grep -Po 'VAR\(\\"\K[^\\]*'
function( "((2 * VAR(\"xxx\")) - VAR(\"yyy\"))" ?name "name" ?plot t ?save t ?evalType 'point)
function("value(res VAR(\"zzz\"))" ?name "othername" ?plot t ?save t ?evalType 'point)
xxx
yyy
zzz
전임자.
$ grep -Po '(?<=VAR\(\\").*?(?=\\")'
function( "((2 * VAR(\"xxx\")) - VAR(\"yyy\"))" ?name "name" ?plot t ?save t ?evalType 'point)
function("value(res VAR(\"zzz\"))" ?name "othername" ?plot t ?save t ?evalType 'point)
xxx
yyy
zzz
답변2
grep과 같은 정규 표현식을 원한다고 생각합니다. 그런 것 grep 'VAR\("[A-z0-9]*"\)'
. 그러나 귀하의 경우에는 이 모든 \"가 작동하지 않습니다. 아마도 다음과 같은 것 같습니다.grep '(^VAR(\")[A-z0-9](^\"))' | grep 'VAR\(\\"[A-z0-9]*\\"\)'
나는 grep을 너무 오랫동안 사용하지 않았습니다. :)