Bash 내장 정규 표현식과 sed 및 grep 명령

Bash 내장 정규 표현식과 sed 및 grep 명령

Bash에는 패턴 일치를 위한 정규식이 내장되어 있습니다. sed 및 egrep 명령으로도 이 작업을 수행할 수 있습니다.

내장 vs 명령을 선택하면 어떤 이점이 있나요? 어느 것이 더 빠르고 다른 측면을 비교하는지 알고 싶습니다.

고쳐 쓰다:

죄송합니다. 일부 Bash 기능을 정규식으로 착각했을 수 있습니다.

"내장 정규 표현식"이란 Bash에서 언급된 문자열 작업을 의미합니다.Bash 문자열 조작, 특히,

문자열 제거

stringZ=abcABC123ABCabc
echo ${stringZ#a*C}      # 123ABCabc

문자열 교체

stringZ=abcABC123ABCabc
echo ${stringZ/a?c/xyz}       # xyzABC123ABCabc
                              # Replaces first match of 'abc' with 'xyz'.

정규식인가요?

답변1

업데이트된 문제를 해결하세요.

엄밀히 말하면, 당신이 보여준 것은 셸에서 정규식을 적용한 것이 아닙니다. 둘 다 매개변수 확장을 사용합니다.쉘 볼, 파일 이름 확장을 수행하기 위해 파일 이름 globbing 패턴으로 사용하는 것과 동일한 패턴입니다(예 cat text*.txt >combined: .

첫 번째 확장은 표준 접두사 문자열 제거인 반면, 두 번째 확장은 비표준(그러나 bash일부 다른 쉘에 의해 구현됨)보다 일반적인 대체입니다. 둘 다 정규식을 사용하지 않으며 동일한 유형의 작업을 수행할 수 없습니다.쉘 와일드카드 모드 있음grep, sed또는 을 사용합니다 awk.

셸에서 정규식을 사용하려면 셸이 이를 지원해야 하며(많은 셸에서 제공하지만 Unix 셸의 표준 기능은 아님) 셸에서 제공하는 구문을 사용해야 합니다. 이 경우 내부 연산자를 bash사용합니다 .=~[[ ... ]]

어떤 것의 목적을 가리킨다.기초적인정규식(확장하다정규식)은 표준 유틸리티를 통해 제한된 방식으로 구현할 수도 있습니다 expr. 그러나 이것은 거의 사용되지 않습니다.


문제의 원래 공식화:

귀하는 현재 작업에 적합한 도구를 선택합니다.

도구 및 기본 용도:

  1. 셸 내부에서 을 사용하여 =~셸 변수에 저장된 문자열에 정규식을 적용할 수 있습니다. 이는 일반적으로 문자열이 특정 표현식과 일치하는지 테스트하고 부분 문자열을 추출하는 데 사용됩니다. 사용자가 제공한 입력의 유효성을 검사하거나 짧은 문자열을 처리하는 등의 작업에 이상적입니다.[[ ... ]]bash루프에서 한 줄씩 처리되는 작업을 포함하지 않습니다..

  2. grep더 간단한 파일 처리 작업 에 사용할 수 있습니다 . 패턴(정규식 또는 일반 문자열)을 기반으로 스트림이나 하나 이상의 파일에서 행을 추출하는 데 유용합니다. 또한 입력 데이터에 하나 이상의 패턴이 존재하는지 테스트할 수도 있습니다. 수행하는 데 사용하는 대부분의 작업은 grep에서도 수행할 수 있지만 sed그 반대의 경우는 불가능합니다.

  3. 파일에 대한 고급 처리를 수행하려면 를 사용하면 sed인라인 정규식 대체를 사용하여 스트림이나 하나 이상의 문서를 편집할 수 있습니다. 또한 절대 줄 번호, 정규식 또는 지정된 범위를 기반으로 줄을 추가, 추가, 교체 또는 삭제할 수 있습니다. 시내가 되다편집하다, 편집 작업은 sed일반적으로 텍스트 편집기를 사용하여 수행해야 하는 편집 유형과 동일합니다. 수행하는 데 사용하는 대부분의 작업은 sed에서도 수행할 수 있지만 awk그 반대의 경우는 불가능합니다.

  4. 구조화된 텍스트 데이터로 작업하고 다양한 데이터 조작이 필요한 경우 특히 특정 열 추출, 수학 연산 수행, 데이터 필터링, 변환 또는 집계를 위한 사용자 정의 논리 적용과 같은 작업을 위해 텍스트 파일을 처리하는 데 익숙 할 awk수 있습니다 . 이러한 처리 중 일부에는 내장 기능, 특정 정규식과 일치하는 레코드에 사용자 정의 코드 적용, 대체에 정규식 사용 등이 포함될 수 있습니다 .sedawkawk

  5. JSON, YAML, XML 및 CSV(단순한 쉼표로 구분된 값보다 고급 인용 규칙을 사용함)와 같은 일부 구조화된 형식에는 인용 및 문자 인코딩 측면에서 서식 규칙이 어떻게 적용되는지에 대한 주의와 이해가 필요합니다. 이러한 유형의 데이터에는 jqMiller( mlr) xmlstarlet등과 같은 특수 처리 소프트웨어를 사용해야 합니다 . csvkit이러한 도구 중 다수를 사용하면 현재 작업에 필요한 경우 정규식을 사용하여 주어진 데이터를 안전하게 처리할 수 있습니다.

다른 방법보다 작업으로 시작하여 도구를 선택하는 것이 더 일반적입니다.

관련 정보