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
. 그러나 이것은 거의 사용되지 않습니다.
문제의 원래 공식화:
귀하는 현재 작업에 적합한 도구를 선택합니다.
도구 및 기본 용도:
셸 내부에서 을 사용하여
=~
셸 변수에 저장된 문자열에 정규식을 적용할 수 있습니다. 이는 일반적으로 문자열이 특정 표현식과 일치하는지 테스트하고 부분 문자열을 추출하는 데 사용됩니다. 사용자가 제공한 입력의 유효성을 검사하거나 짧은 문자열을 처리하는 등의 작업에 이상적입니다.[[ ... ]]
bash
루프에서 한 줄씩 처리되는 작업을 포함하지 않습니다..grep
더 간단한 파일 처리 작업 에 사용할 수 있습니다 . 패턴(정규식 또는 일반 문자열)을 기반으로 스트림이나 하나 이상의 파일에서 행을 추출하는 데 유용합니다. 또한 입력 데이터에 하나 이상의 패턴이 존재하는지 테스트할 수도 있습니다. 수행하는 데 사용하는 대부분의 작업은grep
에서도 수행할 수 있지만sed
그 반대의 경우는 불가능합니다.파일에 대한 고급 처리를 수행하려면 를 사용하면
sed
인라인 정규식 대체를 사용하여 스트림이나 하나 이상의 문서를 편집할 수 있습니다. 또한 절대 줄 번호, 정규식 또는 지정된 범위를 기반으로 줄을 추가, 추가, 교체 또는 삭제할 수 있습니다. 시내가 되다편집하다, 편집 작업은sed
일반적으로 텍스트 편집기를 사용하여 수행해야 하는 편집 유형과 동일합니다. 수행하는 데 사용하는 대부분의 작업은sed
에서도 수행할 수 있지만awk
그 반대의 경우는 불가능합니다.구조화된 텍스트 데이터로 작업하고 다양한 데이터 조작이 필요한 경우 특히 특정 열 추출, 수학 연산 수행, 데이터 필터링, 변환 또는 집계를 위한 사용자 정의 논리 적용과 같은 작업을 위해 텍스트 파일을 처리하는 데 익숙 할
awk
수 있습니다 . 이러한 처리 중 일부에는 내장 기능, 특정 정규식과 일치하는 레코드에 사용자 정의 코드 적용, 대체에 정규식 사용 등이 포함될 수 있습니다 .sed
awk
awk
JSON, YAML, XML 및 CSV(단순한 쉼표로 구분된 값보다 고급 인용 규칙을 사용함)와 같은 일부 구조화된 형식에는 인용 및 문자 인코딩 측면에서 서식 규칙이 어떻게 적용되는지에 대한 주의와 이해가 필요합니다. 이러한 유형의 데이터에는
jq
Miller(mlr
)xmlstarlet
등과 같은 특수 처리 소프트웨어를 사용해야 합니다 .csvkit
이러한 도구 중 다수를 사용하면 현재 작업에 필요한 경우 정규식을 사용하여 주어진 데이터를 안전하게 처리할 수 있습니다.
다른 방법보다 작업으로 시작하여 도구를 선택하는 것이 더 일반적입니다.