Unix / Linux - 정규 표현식과 SED

안녕하세요, 미래의 명령줄 마법사 여러분! 오늘 우리는 정규 표현식(regex)과 Unix/Linux에서 강력한 SED 명령어의 마법의 세상으로 뛰어들어보겠습니다. 벨트를 고쳐매고, 텍스트 조작 방식을 바꿔버릴 짜릿한 모험에 올라타세요!

Unix / Linux - Regular Expressions

sed 호출

기본적인 것으로 시작해보겠습니다. SED는 "Stream Editor"의 약자로, 강력한 텍스트 처리 도구입니다. 사용하려면 단순히 "sed" 뒤에 명령어를 작성하면 됩니다. 텍스트 조작의 요정을 불러들이는 것과 같습니다!

sed 'command' filename

예를 들어:

sed 's/hello/bonjour/' greetings.txt

이 명령어는 파일 greetings.txt에서 "hello"를 "bonjour"로 바꿔줍니다. 간단하지 않나요?

sed 일반 문법

sed의 일반 문법은 마법의 주문처럼 보입니다:

sed OPTIONS... [SCRIPT] [INPUTFILE...]

이게 무서워 보일 수 있지만, 조금씩 풀어보면 재미있는 퍼즐을 풀는 것과 같습니다!

모든 줄을 지우는 sed

파일의 모든 텍스트를 사라지게 하고 싶으신가요? sed가 이를 할 수 있습니다! 이렇게 합니다:

sed 'd' filename

이 명령어는 파일의 모든 줄을 지웁니다. 디지털 노트북에 지우개를 쓰는 것과 같습니다!

sed 주소

sed의 주소는 텍스트의 GPS 좌표와 같습니다. sed가 마법을 부리는 곳을 알려줍니다. 다음은 몇 가지 예제입니다:

sed '2d' file.txt  # 2번째 줄을 지운다
sed '/pattern/d' file.txt  # 'pattern'을 포함한 줄을 지운다

sed 주소 범위

때로는 줄의 범위에 마법을 부리고 싶을 때가 있습니다. 이렇게 합니다:

sed '2,5d' file.txt  # 2에서 5번째 줄을 지운다
sed '2,$d' file.txt  # 2번째 줄부터 파일의 끝까지 지운다

치환 명령어

치환 명령어는 sed의 핵심입니다. "찾아 바꾸기"의 강화版입니다!

sed 's/old/new/' file.txt

이 명령어는 각 줄의 첫 번째 "old"을 "new"로 바꿔줍니다.

치환 플래그

플래그는 치환 명령어의 파워업과 같습니다. 다음은 일반적인 플래그입니다:

플래그 설명
g 모든 발생을 바꾼다
i 대소문자 무시
p 변경된 줄 출력
w 결과를 파일에 쓴다

예제:

sed 's/cat/dog/g' pets.txt

이 명령어는 "cat"의 모든 발생을 "dog"으로 바꿔줍니다.

대체 문자 분리자 사용

텍스트에 많은 슬래시가 포함된 경우, 다른 분리자를 사용할 수 있습니다:

sed 's#/usr/local/bin#/common/bin#' paths.txt

여기서는 '#'를 분리자로 사용하고 있습니다.

공백으로 치환

텍스트를 무形的으로 사라지게 하고 싶으신가요? 다음과 같이 합니다:

sed 's/unwanted//g' file.txt

이 명령어는 파일에서 "unwanted"의 모든 발생을 지웁니다.

주소 치환

주소와 치환을 결합하여 정밀한 텍스트 수술을 할 수 있습니다:

sed '3,6s/foo/bar/g' file.txt

이 명령어는 3에서 6번째 줄에서 "foo"를 모두 "bar"로 바꿔줍니다.

일치 명령어

일치 명령어는 우리가 관심 있는 줄을 비추는 스포트라이트와 같습니다:

sed -n '/pattern/p' file.txt

이 명령어는 "pattern"을 포함한 줄만 출력합니다.

정규 표현식 사용

이제 진짜 마법에 접근해보겠습니다! 정규 표현식은 와일드카드의 강화版입니다. 간단한 예제를 보겠습니다:

sed -n '/^The/p' story.txt

이 명령어는 "The"로 시작하는 모든 줄을 출력합니다.

일치 문자

정규 표현식에는 변신하는 문자가 있습니다:

문자 의미
. 모든 단일 문자
* 이전 문자의 0개 이상
^ 줄의 시작
$ 줄의 끝

예제:

sed -n '/c.t/p' animals.txt

이 명령어는 "cat", "cot", "cut" 등을 일치시킵니다.

문자 클래스 키워드

문자 클래스는 팀처럼 행동하는 문자들입니다. 몇 가지 MVP 선수를 소개합니다:

클래스 일치
[:alpha:] 알파벳 문자
[:digit:] 숫자 문자
[:alnum:] 알파벳 및 숫자 문자

예제:

sed -n '/[[:digit:]]/p' data.txt

이 명령어는 숫자를 포함한 줄을 출력합니다.

앰퍼샌드 참조

앰퍼샌드(&)는 일치된 것을 반영하는 마법의 거울입니다:

sed 's/[0-9]/(&)/' numbers.txt

이 명령어는 각 숫자에 괄호를 넣습니다.

여러 sed 명령어 사용

한 번에 여러 마법을 부리고 싶으신가요? -e 옵션을 사용하세요:

sed -e 's/foo/bar/g' -e 's/baz/qux/g' file.txt

이 명령어는 두 가지 치환을 동시에 수행합니다!

역 참조

역 참조는 시간 기계처럼 일치된 부분을 재사용할 수 있게 합니다:

sed 's/\(.*\):\([^:]*\)/\2:\1/' names.txt

이 명령어는 콜론 앞后的 텍스트와 뒤后的 텍스트를 서로 바꿔줍니다.

그럼 여러분, 우리는 sed와 정규 표현식의 땅을 여행했습니다. 연습이 완벽을 만드는 것을 기억하세요. 그러므로 명령줄 마법사로 성장하기 위해 텍스트를 조작해보세요! 행복한 코딩을!

Credits: Image by storyset