RegExp: 이해해 보세요. 쿼리하기

RegExp: 이해해 보세요. 쿼리하기

나는 몇 가지 테스트를 실행했고 나 자신이 정기적으로 사용하는 것을 생각해냈습니다.

source그래서 제가 하는 많은 일에 공통적으로 사용되는 몇 가지 파일이 있습니다 . "=" 쌍 뒤의 모든 항목을 제거하여 템플릿을 만들려고 합니다 Name=Value. 즉, sed로 파일을 편집한 후 다음
Foo=Bar
대신 다음을 수행합니다.
Foo=

이 작업을 수행하기 위해 RegExp 문을 생성하려고 시도했지만 이후의 값만 삭제했지만 여러 개가 아닌 단일과 일치하는 값을 =생성할 수 없는 것 같습니다 (예: 일치 하지만 일치하지 않음 ).=======

이것은 게시하기로 결정하기 전에 제가 얻은 가장 먼 정보입니다.s/={1}.*/=/g

누구든지 통찰력을 제공할 수 있습니까? =이것은 우리 팀에서 공통적으로 사용하는 주석 형식이고 더 쉽게 읽을 수 있도록 데이터 입력 섹션을 분할하는 데 사용하기 때문에 여러 항목을 삭제하는 것을 원하지 않습니다 .

일부 테스트 값: --

NameOfServer=Foo   
`#`==========  
`#` UserData   
`#`==========

이상적으로는 첫 번째 줄의 "=Foo"와 일치하고 싶지만 주석 처리된 줄의 여러 "="는 제거하지 않는 것이 좋습니다.

참고: 저는 Sed(v4.2)를 사용할 것입니다(관련성이 있는 경우 "패턴 찾기 및 바꾸기"를 위해 Vim에서 Sed를 사용할 수도 있습니다).

답변1

[a-zA-Z_]변수는 한 문자 뒤에 0개 이상의 문자가 오는 문자열입니다 [a-zA-Z_0-9](POSIX/C 로케일에서).

a 바로 뒤에 이러한 문자열을 일치시키고 =나머지 줄을 제거할 수 있습니다.

sed 's/\([a-zA-Z_][a-zA-Z_0-9]*=\).*/\1/' file

귀하의 예제 파일에서 이것은 생성됩니다

NameOfServer=
`#`==========
`#` UserData
`#`==========

답변2

={1}.*Same as 는 =.*등호 뒤에 임의 개수의 문자가 오는 것과 일치합니다. 정규 표현식은 일반적으로 "탐욕적"이므로 가장 긴 일치 항목을 찾으려고 합니다. 등호 문자열에 이 패턴을 사용하면 정규식 엔진이 해당 문자를 의미하는지 알 수 없기 때문에 전체 문자열과 일치합니다.밖의등호.

=[^=]*등호 뒤에 등호를 제외한 모든 문자가 오는 것을 일치시키는 데 사용됩니다 . 또는 =[^=].*등호 다음에 다른 문자가 오고 그 뒤에 무엇이든 일치합니다.

또는 변수 할당과 라인을 더 밀접하게 일치시키려면 다음과 같습니다.

sed -Ee 's/^([a-zA-Z0-9_]+=).*/\1/'

변수 할당처럼 보이는지 확인한 후 삭제합니다 =. 변수 이름에는 영문자, 숫자, 밑줄만 포함될 수 있다고 가정합니다. 이를 조정해야 할 수도 있습니다.

관련 정보