개발/쉘 스크립트

[LeetCode | Shell] 193. Valid Phone Numbers

Grara 2023. 6. 6. 00:35

문제

https://leetcode.com/problems/valid-phone-numbers/description/

 

Valid Phone Numbers - LeetCode

Can you solve this real interview question? Valid Phone Numbers - Given a text file file.txt that contains a list of phone numbers (one per line), write a one-liner bash script to print all valid phone numbers. You may assume that a valid phone number must

leetcode.com

- 한줄짜리 스크립트로 구성해야 함

- file.txt에서 다음과 같은 유효한 전화번호 뽑아내기

987-123-4567 
(123) 456-7890

풀이

1번 답안

- grep와 정규표현식을 이용해서 답안 도출하기

grep -E '^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$' file.txt
cat file.txt | grep -E '^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$'

 

grep와 awk

`grep`와 `awk`는 모두 텍스트 기반의 데이터를 처리하는 유닉스 명령어.

- `grep`: `grep`은 주어진 텍스트에서 특정 패턴을 검색하는 데 사용. 주로 특정 문자열이나 정규표현식과 일치하는 라인을 찾아내는 데에 쓰이며, 특정 파일이나 표준 입력에서 패턴 매칭을 수행. `grep`은 간단하고 빠르며, 기본적으로 라인 단위로 작동.

- `awk`: `awk`는 텍스트 파일이나 데이터 스트림을 읽어들여 행 단위로 가공하고, 원하는 필드나 열을 추출하거나 조작하는 데 사용. `awk`는 강력한 텍스트 처리 도구로, 구조화된 데이터를 다루는 데에 적합. 특정 패턴에 맞는 라인을 필터링하거나 특정 필드를 기준으로 계산, 조건에 따라 처리하는 등 다양한 작업을 수행할 수 있습니다.

- `grep`은 패턴 검색에 특화되어 있고 라인 단위로 작동.

- `awk`는 텍스트 데이터를 구조화하여 처리하고 필드 단위로 작동하는 범용적인 텍스트 처리 도구.

느낀점

- 쉘 스크립트를 활용할 때 정규표현식이 생각보다 많이 활용되는 것 같음

- 정규표현식에서 숫자에 일치하는 패턴을 사용할 때, \d와 [0-9]는 다를 수 있음 -> 정확한 사용 방법은 해당 정규표현식이 적용되는 상황과 환경에 달림 

더보기

- `\d`: `\d`는 Unicode 숫자에 일치합니다. 즉, 0부터 9까지의 모든 숫자뿐만 아니라 다른 언어에서 사용되는 숫자도 포함. 따라서, 다국어 환경에서 다양한 숫자를 대상으로 할 때 유용함.


- `[0-9]`: `[0-9]`는 ASCII 문자셋에서 정의된 숫자(0~9)만 포함됩니다. 따라서, 주로 영어 기반의 환경에서 숫자를 대상으로 할 때 사용됨.

일반적으로 `\d`는 더 범용적이고 다양한 숫자에 대한 호환성을 가지며,

`[0-9]`는 ASCII 범위 내의 숫자에 대해서만 사용하는 것이 일반적

참고

정규표현식

- regexr : 정규표현식에 대한 도움말과 사례를 모음

- refexper : 정규표현식을 시각화해서 보여줌

- gskinner.com : 만든 정규표현식 기반으로 실시간으로 결과를 테스트할 수 있음