쉼표를 제외한 모든 문자와 공백을 정규식으로 일치시키고 싶습니다.Regex : 쉼표를 제외한 모든 문자 (공백 포함) 일치
[^,]*
을하지만, 나는 또한 아무 곳이나 문자열 등 공백 문자, 탭, 공백, 새 줄을 일치시킬 : 만 쉼표를 제외한 모든 문자와 일치하는 것은 나에게 제공합니다.
EDIT :
이 비아 VIM으로 나오지 사용%의 S/foo에/모음/GC.
나는 다음과 같은 예에서 쉼표까지 FUNC부터 찾으려면 : 나는
쉼표를 제외한 모든 문자와 공백을 정규식으로 일치시키고 싶습니다.Regex : 쉼표를 제외한 모든 문자 (공백 포함) 일치
[^,]*
을하지만, 나는 또한 아무 곳이나 문자열 등 공백 문자, 탭, 공백, 새 줄을 일치시킬 : 만 쉼표를 제외한 모든 문자와 일치하는 것은 나에게 제공합니다.
EDIT :
이 비아 VIM으로 나오지 사용%의 S/foo에/모음/GC.
나는 다음과 같은 예에서 쉼표까지 FUNC부터 찾으려면 : 나는
SED
이 RegEx
을 사용하여 multiline
로 작업하려면
func("bla bla bla"
"asdfasdfasdfasdfasdfasdf"
"asdfasdfasdf", "more strings")
, 당신은 here에 보일 것입니다.
는 편집 :
명령 SED
에서 줄 바꿈 작업은 조금 다르다. SED
명령은 여러 줄 작업 N
, P
및 D
을 관리하는 세 가지 패턴을 지원합니다. 작동 방식을 보려면 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
이것은 내게는 효과가없는 것 같았지만 내 문제에 대한 충분한 정보를 포함하고 있지 않았기 때문일 수도있다. 나는 원래의 질문을 편집했다. 필자는 본질적으로 문자열 func을 찾고 싶다. (% s/func ([^,] *,/bar/gc) 그러나 이것은 새로운 줄을 찾지 못하는 것 같다. – selecsosi
아니면 나는 그렇지 않았다. (? m) [^,] *,/bar/gc 다음과 같이 [^,] * 앞에 넣어야합니다. – selecsosi
SED에서는 이런 식으로 작동하지 않습니다. http://unix.stackexchange.com/questions/26284/how-can-i-use-sed-to-replace-a-multi-line-string – NeverHopeless
를 생성하면 여러 줄에 걸쳐 패턴과 일치하는 것을 시도하고있다.
여기 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
명령은 첫 번째 쉼표 앞의 모든 문자를 (여러 줄) 패턴 공간과 비교하고 대체를 수행하는 명령이 실행됩니다.
[^,] * 쉼표까지 일치합니까? http://rubular.com/r/sAq4ufTDe2 –
귀하의 패턴이 괜찮은 것 같습니다. 만약 당신이 사용하고있는 regexp 엔진에 필요할 수있는 쉼표를 한 번 이스케이프하려고하면 :'[^ \,] *' –
[^,] *는 나를위한 쉼표 나 줄 끝까지 일치합니다. – selecsosi