Awk 및 정규 표현식을 사용하여 텍스트 또는 문자열 필터링 방법 – 파트 1

리눅스에서 특정 명령어를 실행하여 문자열이나 파일에서 텍스트를 읽거나 편집할 때, 종종 출력물을 특정 관심 영역으로 필터링하려고 노력합니다. 여기서 정규 표현식을 사용하는 것이 유용합니다.

정규 표현식이란 무엇인가요?

A regular expression can be defined as strings that represent several sequences of characters. One of the most important things about regular expressions is that they allow you to filter the output of a command or file, edit a section of a text or configuration file, and so on.

정규 표현식의 특징

정규 표현식은 다음으로 이루어져 있습니다:

  • 보통의 문자 공백, 밑줄(_), A-Z, a-z, 0-9와 같은 것들입니다.
  • 메타 문자 보통의 문자로 확장되는 문자로, 다음과 같습니다:
    • (.) 이것은 새 줄을 제외한 임의의 한 문자와 일치합니다.
    • (*) 바로 앞의 문자의 0개 이상의 존재와 일치합니다.
    • [문자(들)] 문자(들)에서 지정된 문자 중 하나와 일치하며, (-)을 사용하여 문자의 범위를 나타낼 수도 있습니다. 예를 들어 [a-f], [1-5] 등입니다.
    • ^ 파일에서 줄의 시작과 일치합니다.
    • $ 파일에서 줄의 끝과 일치합니다.
    • \ 이것은 이스케이프 문자입니다.

텍스트를 필터링하려면 awk와 같은 텍스트 필터링 도구를 사용해야 합니다. awk를 자체 프로그래밍 언어로 생각할 수 있습니다. 그러나 이 awk 사용 가이드의 범위에서는 그것을 단순한 명령 줄 필터링 도구로 다룰 것입니다.

awk의 일반적인 구문은 다음과 같습니다:

awk 'script' filename

'script'awk에서 이해되고 파일, 파일명에 실행되는 명령의 집합입니다.

그것은 파일에서 주어진 줄을 읽고, 줄의 사본을 만든 다음 스크립트를 줄에 대해 실행함으로써 작동합니다. 이는 파일의 모든 줄에 대해 반복됩니다.

'script''/pattern/ action' 형식입니다. 여기서 패턴은 정규 표현식이고 액션은 awk가 줄에서 주어진 패턴을 찾을 때 수행할 작업입니다.

리눅스에서 Awk 필터링 도구 사용하기

다음 예에서는 위에서 설명한 메타 문자에 중점을 둘 것입니다.

Awk를 사용하여 파일에서 모든 줄 인쇄하기

다음 예제는 패턴이 지정되지 않았으므로 파일 /etc/hosts의 모든 줄을 인쇄합니다.

awk '//{print}'/etc/hosts
Awk Prints All Lines in a File

Awk 패턴 사용: 파일에서 ‘localhost’와 일치하는 줄 출력

아래 예에서 패턴 localhost가 제공되었으므로 awk는 /etc/hosts 파일에서 localhost를 포함하는 줄에 일치합니다.

awk '/localhost/{print}' /etc/hosts 
Awk Print Given Matching Line in a File

패턴에서 (.)와 함께 Awk 사용

(.)는 아래 예에서 loc, localhost, localnet을 포함하는 문자열에 일치합니다.

즉, * l 한 글자 c *입니다.

awk '/l.c/{print}' /etc/hosts
Use Awk to Print Matching Strings in a File

패턴에서 (*)와 함께 Awk 사용

localhost, localnet, lines, capable를 포함하는 문자열에 일치합니다.

awk '/l*c/{print}' /etc/localhost
Use Awk to Match Strings in File

(*)는 가능한 가장 긴 일치를 찾으려고 합니다.

이를 보여주는 예를 살펴보겠습니다. 아래 줄에서 시작하는 글자 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

셋 [문자(들)을] 사용하여 Awk 사용

예를 들어, 셋 [al1]을 취하면 awk는 파일 /etc/hosts의 줄에서 문자 a 또는 l 또는 1을 포함하는 모든 문자열과 일치합니다.

awk '/[al1]/{print}' /etc/hosts
Use-Awk to Print Matching Character in File

다음 예에서는 K 또는 k로 시작하고 T로 끝나는 문자열을 일치합니다:

# awk '/[Kk]T/{print}' /etc/hosts 
Use Awk to Print Matched String in File

문자 범위 지정하기

awk로 문자 이해하기:

  • [0-9]는 하나의 숫자를 의미합니다
  • [a-z]는 하나의 소문자를 일치시킵니다
  • [A-Z]는 하나의 대문자를 일치시킵니다
  • [a-zA-Z]는 하나의 문자를 일치시킵니다
  • [a-zA-Z 0-9]는 하나의 문자 또는 숫자를 일치시킵니다

아래 예제를 살펴봅시다:

awk '/[0-9]/{print}' /etc/hosts 
Use Awk To Print Matching Numbers in File

위의 예에서 파일 /etc/hosts의 모든 줄은 적어도 하나의 숫자 [0-9]를 포함합니다.

(^) 메타 문자와 함께 Awk 사용하기

아래 예제와 같이 제공된 패턴으로 시작하는 모든 줄을 일치시킵니다:

# awk '/^fe/{print}' /etc/hosts
# awk '/^ff/{print}' /etc/hosts
Use Awk to Print All Matching Lines with Pattern

($) 메타 문자와 함께 Awk 사용하기

제공된 패턴으로 끝나는 모든 줄을 일치시킵니다:

awk '/ab$/{print}' /etc/hosts
awk '/ost$/{print}' /etc/hosts
awk '/rs$/{print}' /etc/hosts
Use Awk to Print Given Pattern String

(\) 이스케이프 문자와 함께 Awk 사용하기

이것은 그 다음 문자를 리터럴로 취급하여 그대로 고려하도록 허용합니다.

아래 예제에서 첫 번째 명령은 파일의 모든 줄을 출력하고, 두 번째 명령은 $25.00가 포함된 줄을 일치시키려고 하지만 이스케이프 문자가 사용되지 않았기 때문에 아무것도 출력하지 않습니다.

세 번째 명령은 이스케이프 문자를 사용하여 $를 그대로 읽도록 합니다.

awk '//{print}' deals.txt
awk '/$25.00/{print}' deals.txt
awk '/\$25.00/{print}' deals.txt
Use Awk with Escape Character
요약

awk 명령줄 필터링 도구로 이것이 전부가 아닙니다. 위의 예제는 awk의 기본 작업입니다. 다음 부분에서는 awk의 복잡한 기능을 사용하는 방법에 대해 더 나아가겠습니다.

댓글 섹션에 읽어주시고 추가 사항이나 명확한 설명이 있으면 댓글을 남겨주시기 바랍니다.

Source:
https://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/