2012-11-17 2 views
0

쉼표를 제외한 모든 문자와 공백을 정규식으로 일치시키고 싶습니다.Regex : 쉼표를 제외한 모든 문자 (공백 포함) 일치

[^,]* 

을하지만, 나는 또한 아무 곳이나 문자열 등 공백 문자, 탭, 공백, 새 줄을 일치시킬 : 만 쉼표를 제외한 모든 문자와 일치하는 것은 나에게 제공합니다.

EDIT :

이 비아 VIM으로 나오지 사용

%의 S/foo에/모음/GC.

나는 다음과 같은 예에서 쉼표까지 FUNC부터 찾으려면 : 나는

+0

[^,] * 쉼표까지 일치합니까? http://rubular.com/r/sAq4ufTDe2 –

+0

귀하의 패턴이 괜찮은 것 같습니다. 만약 당신이 사용하고있는 regexp 엔진에 필요할 수있는 쉼표를 한 번 이스케이프하려고하면 :'[^ \,] *' –

+0

[^,] *는 나를위한 쉼표 나 줄 끝까지 일치합니다. – selecsosi

답변

0

SEDRegEx을 사용하여 multiline로 작업하려면

func("bla bla bla" 
    "asdfasdfasdfasdfasdfasdf" 
"asdfasdfasdf", "more strings") 

, 당신은 here에 보일 것입니다.

는 편집 :

명령 SED에서 줄 바꿈 작업은 조금 다르다. SED 명령은 여러 줄 작업 N, PD을 관리하는 세 가지 패턴을 지원합니다. 작동 방식을 보려면 this (여러 줄로 작업하기) explaination을 참조하십시오. 여기에이 세 가지 작업이 설명됩니다.

제 생각 엔 N 연산자는 여기에서 누락 된 고려 사항입니다. N 연산자를 추가하면 문자열에 \n을 감지 할 수 있습니다.

here에서 :

때때로 하나가 나오지 스크립트에서 새 줄 문자를 사용하고자. 음, 여기에는 약간의 미묘한 문제가 있습니다. 새 줄을 검색하려면 "\ n"을 사용해야합니다. 다음은 문구를 으로 검색하고 해당 문구 다음에 새 행 문자를 삭제하는 예입니다 ( 두 행을 함께 연결).

(echo a; echo x; echo y) | SED '/ X $/{N S : X는 \ n을 : X :}'

새 라인을 삽입하는 경우, "사용하지 않는,

그러나

XY를 생성하는 \ n "대신에 리터럴 새 줄 문자를 삽입하십시오.

(echo a; echo x; echo y) | SED '들 : X : X : \'

그래서 기본적으로

X

Y

+0

이것은 내게는 효과가없는 것 같았지만 내 문제에 대한 충분한 정보를 포함하고 있지 않았기 때문일 수도있다. 나는 원래의 질문을 편집했다. 필자는 본질적으로 문자열 func을 찾고 싶다. (% s/func ([^,] *,/bar/gc) 그러나 이것은 새로운 줄을 찾지 못하는 것 같다. – selecsosi

+0

아니면 나는 그렇지 않았다. (? m) [^,] *,/bar/gc 다음과 같이 [^,] * 앞에 넣어야합니다. – selecsosi

+0

SED에서는 이런 식으로 작동하지 않습니다. http://unix.stackexchange.com/questions/26284/how-can-i-use-sed-to-replace-a-multi-line-string – NeverHopeless

0

를 생성하면 여러 줄에 걸쳐 패턴과 일치하는 것을 시도하고있다.

여기 sed에서 할 수있는 한 가지 방법이다 (이 비록 vim 내에서 사용 가능한없는 확신, 나는 vim 내에서이를 복제하는 방법을 모른다)

sed ' 
    /func/{ 
      :loop 
      /,/! {N; b loop} 
      s/[^,]*/func("ok"/ 
    } 
' inputfile 

의이 inputfile 다음 행이 포함되어 있다고 가정 해 봅시다

func("bla bla bla" 
    "asdfasdfasdfasdfasdfasdf" 
"asdfasdfasdf", "more strings") 

출력

func("ok", "more strings") 
,617 인개


세부 : 라인이 func을 포함

  • 경우 괄호를 입력합니다.
  • :loop
  • 라인이 ,
    • (loop 라벨로 이동 패턴 공간 (N)
    • 지점 /에 다음 줄을 추가 (즉 /,/! 수단은 무엇을) 포함되지 않은 경우
    • loop라는 이름의 레이블입니다 b loop)
  • 그래서 ,이 발견 될 때까지 줄을 추가하고 반복합니다. s 명령은 첫 번째 쉼표 앞의 모든 문자를 (여러 줄) 패턴 공간과 비교하고 대체를 수행하는 명령이 실행됩니다.
관련 문제