Awk 및 정규식을 사용하여 파일의 텍스트 또는 문자열을 필터링하는 방법
Unix/Linux에서 특정 명령을 실행하여 문자열이나 파일에서 텍스트를 읽거나 편집 할 때 대부분의 경우 특정 관심 섹션으로 출력을 필터링하려고합니다. 정규 표현식을 사용하는 것이 편리합니다.
정규식은 여러 문자 시퀀스를 나타내는 문자열로 정의 할 수 있습니다. 정규식에서 가장 중요한 것 중 하나는 명령 또는 파일의 출력을 필터링하고 텍스트 또는 구성 파일의 섹션을 편집하는 등의 작업을 할 수 있다는 것입니다.
정규식은 다음으로 구성됩니다.
- Ordinary characters such as space, underscore(_), A-Z, a-z, 0-9.
- Meta characters that are expanded to ordinary characters, they include:
(.)
it matches any single character except a newline.(*)
it matches zero or more existences of the immediate character preceding it.[ character(s) ]
it matches any one of the characters specified in character(s), one can also use a hyphen(-)
to mean a range of characters such as[a-f]
,[1-5]
, and so on.^
it matches the beginning of a line in a file.$
matches the end of line in a file.\
it is an escape character.
텍스트를 필터링하려면 awk와 같은 텍스트 필터링 도구를 사용해야합니다. awk는 자체 프로그래밍 언어로 생각할 수 있습니다. 그러나 awk 사용에 대한이 가이드의 범위에서는 간단한 명령 줄 필터링 도구로 다룰 것입니다.
awk의 일반적인 구문은 다음과 같습니다.
# awk 'script' filename
여기서
'script'
는 awk에 의해 이해되고 파일, filename에서 실행되는 일련의 명령입니다.파일에서 주어진 행을 읽고 행의 사본을 만든 다음 해당 행에서 스크립트를 실행합니다. 이것은 파일의 모든 행에서 반복됩니다.
'script'
는'/ pattern/action'
형식입니다. 여기서 pattern은 정규 표현식이고 action은 awk가 awk에서 주어진 패턴을 찾을 때 수행 할 작업입니다. "선.Linux에서 Awk 필터링 도구를 사용하는 방법
다음 예제에서는 awk의 기능에 대해 위에서 논의한 메타 문자에 초점을 맞출 것입니다.
아래 예제는 패턴이 지정되지 않았으므로/etc/hosts 파일의 모든 행을 인쇄합니다.
# awk '//{print}'/etc/hosts
아래 예에서는
localhost
패턴이 주어 졌으므로 awk는/etc/hosts
파일에서 localhost가있는 행과 일치합니다.# awk '/localhost/{print}' /etc/hosts
(.)
는 아래 예에서 loc, localhost, localnet을 포함하는 문자열과 일치합니다.즉, * l some_single_character c *.
# awk '/l.c/{print}' /etc/hosts
아래 예제와 같이 localhost, localnet, 라인, 가능을 포함하는 문자열과 일치합니다.
# awk '/l*c/{print}' /etc/localhost
또한
(*)
는 감지 할 수있는 가장 긴 일치 항목을 얻으려고합니다.이를 보여주는 사례를 살펴보고
t
문자로 시작하고t
로 끝나는 일치 문자열을 의미하는 정규 표현식t * t
를 사용합니다. "아래 줄에서 :this is tecmint, where you get the best good tutorials, how to's, guides, tecmint.
/t * t/
패턴을 사용하면 다음과 같은 가능성이 있습니다.this is t this is tecmint this is tecmint, where you get t this is tecmint, where you get the best good t this is tecmint, where you get the best good tutorials, how t this is tecmint, where you get the best good tutorials, how tos, guides, t this is tecmint, where you get the best good tutorials, how tos, guides, tecmint
그리고
/t * t/
와일드 카드 문자의(*)
를 사용하면 awk가 마지막 옵션을 선택할 수 있습니다.this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
예를 들어
[al1]
집합을 예로 들어 보겠습니다. 여기서 awk는a
또는l
또는1
문자를 포함하는 모든 문자열과 일치합니다. / etc/hosts 파일의 한 줄에.# awk '/[al1]/{print}' /etc/hosts
다음 예제는
K
또는k
로 시작하는 문자열과T
를 찾습니다.# awk '/[Kk]T/{print}' /etc/hosts
awk로 문자 이해 :
[0-9]
means a single number[a-z]
means match a single lower case letter[A-Z]
means match a single upper case letter[a-zA-Z]
means match a single letter[a-zA-Z 0-9]
means match a single letter or number
아래의 예를 살펴 보겠습니다.
# awk '/[0-9]/{print}' /etc/hosts
위의 예에서/etc/hosts 파일의 모든 행에는 하나 이상의 숫자
[0-9]
가 포함됩니다.아래 예와 같이 제공된 패턴으로 시작하는 모든 행과 일치합니다.
# awk '/^fe/{print}' /etc/hosts # awk '/^ff/{print}' /etc/hosts
제공된 패턴으로 끝나는 모든 행과 일치합니다.
# awk '/ab$/{print}' /etc/hosts # awk '/ost$/{print}' /etc/hosts # awk '/rs$/{print}' /etc/hosts
그것은 당신이 그 뒤에 오는 문자를 그대로 고려하는 리터럴로 취할 수 있습니다.
아래 예에서 첫 번째 명령은 파일의 모든 줄을 인쇄하고 두 번째 명령은 5.00이있는 줄을 일치시키고 싶지만 이스케이프 문자를 사용하지 않기 때문에 아무것도 인쇄하지 않습니다.
세 번째 명령은 $를 그대로 읽는 데 이스케이프 문자가 사용 되었기 때문에 정확합니다.
# awk '//{print}' deals.txt # awk '/$25.00/{print}' deals.txt # awk '/\$25.00/{print}' deals.txt
요약
awk의 기본 작업 위의 예제 인 awk 명령 줄 필터링 도구로는 이것이 전부가 아닙니다. 다음 부분에서는 awk의 복잡한 기능을 사용하는 방법에 대해 설명하겠습니다. 읽어 주셔서 감사합니다. 추가 사항이나 설명이 있으시면 댓글 섹션에 댓글을 남겨주세요.