이번 장은 유닉스에서 일반적으로 가장 많이 쓰이는 명령어들을 연습해 볼 것입니다. 이 명
령어들은 직관적이고 쓰기에 매우 간단합니다. 또한 매우 강력한 결과를 얻기 위해 파이프
나 리다이렉션을 통해 여러 명령어를 결합할 수 있습니다.
Little boy blue
Little Miss Muffet
Little Jack Horner
Wee Willie Winkie
Who could travel much faster than light
Who ate a bad apple and died
Along came a spider
And sat down beside her
Sat on a tuffet
And frightened Miss Muffet away.
And everywhere that Mary went
***문자열 찾기 : grep(Grobal Regular Expression Print)***
grep 명령어는 하나 또는 그 이상의 파일에서 지정한 문자열을 포함하는 행을 보여줍니다.
예를 들어 아래와 같이 입력해 보세요.
grep Mary kim
이것은 kim 파일에서 Mary라는 문자열을 포함하는 모든 행을 찾아 보여줍니다. 나열하는
인수의 순서에 주의하세요. 그리고 찾기 원하는 문자열은 검색해야 할 파일 이름 앞에 써야
합니다.
또 여러 파일에서 찾기 위해 grep을 사용할 수 있습니다. 예를 들어 다음처럼 해 보세요.
grep the kim jeon
이는 kim과 jeon 두 파일에서 the라는 문자열을 찾습니다. 이 문자열은 thee, breathe 같은
긴 단어의 일부분일 수도 있습니다. 한번 명령을 수행하면 grep 명령어가 만드는 출력이
너무 길어 화면에 적당하지 않음을 알게 될 것입니다. 이렇게 정보를 화면 너머로 놓치는
것을 피하기 위해 more를 사용하면 됩니다. 다음처럼 하면 됩니다.
grep the kim jeon | more
위는 grep의 결과를 more를 통해 파이프 시키고 화면 단위로 읽을 수 있게 합니다.
그럼 빈칸을 갖고 있는 문자열을 찾기 위해 grep을 어떻게 사용하는지에 대해 의문점이 생
길 것입니다. 이 때는 문자열을 따옴표로 묶어야 합니다. 예를 들어,
grep "the lamb" kim
위의 grep은 kim 파일에서 the lamb을 포함하고 있는 모든 행을 보여줍니다.
참고 : 따옴표로 명확히 구별
grep 명령어는 파일과 문자열을 구별하기 힘듭니다. 그래서 어떤 사람은 빈칸이 없음에도
불구하고 문자열을 따옴표로 묶는 것을 원칙으로 삼기도 합니다. 예를 들어, 아래처럼 하면
파일 이름과 문자열을 구별하기 쉽습니다. grep "the" kim jeon
***대, 소문자 구별***
일반적으로 grep은 문자열을 찾을 때 대 ,소문자를 구별합니다. 다음을 입력해보세요.
grep "the" kim jeon
grep "The" kim jeon
두 명령이 다른 결과를 나타냄을 알 수 있습니다. 첫 번 것은 the (완전히 소문자)를 찾고
둘째 것은 The(첫 글자가 대문자)를 찾습니다.
그럼 어떤 때에 grep이 대, 소문자를 무시하고 찾아 줄수 있는지 의구심이 갈것입니다.
이런 때는 문자열 앞에 -i 옵션을 지정해 주면 됩니다. 아래와 같이 입력해 보세요.
grep -i "the" kim jeon | more
이 경우 grep은 the, The 또는 다른 대문자와 소문자의 조합을 보여줍니다.
-i 옵션이 문자열 앞에 온다는 사실에 주목하시고 유닉스에서의 옵션은 인수 앞에 온다는
사실을 기억합시다.
***정규 표현식(Regular Expressions)***
grep은 지정된 조건에 맞는 문자열을 찾습니다. 지금까지 명령 행에 주어진 문자열과 정확
히 맞는 것만 찾는 데에 사용해 왔습니다. 그러나 정규 표현식을 사용하여 훨씬 세련된 조
건을 지정할 수 있습니다. 정규 표현식이란 문자의 패턴을 나타내는 문자열입니다. 정규 표
현식은 메타 문자라 불리는 특수 문자를 포함하고 또한 일반 문자, 다시 말해 글자, 숫자 등
을 포함합니다.
##행의 시작##
^ 기호는 행의 시작을 나타내는 메타 문자입니다. 아래와 같이 입력해 보세요.
grep "^Mary" kim
따옴표로 묶인 인수는 일반 문자 Mary 앞에 오는 메타 문자 ^(행의 시작)로 구성된 정규
표현식입니다. 그러므로 정규 표현식은 Mary 가 행의 맨 앞에 오는 것을 grep이 찾도록 합
니다. 다음과 비교해 보세요.
grep "Mary" kim
만약 ^을 빠뜨린다면 Mary가 행의 어디에 있든지 모든 것을 보여줍니다.
또 다른 예로써 다음을 입력해 보세요
ls -l >out
grep "^d" out
ls 명령어는 현재 디렉토리의 모든 정보를 구해서 out으로 리다이렉트시킵니다. 그 다음
grep이 d로 시작하는 모든 행을 찾습니다. 그리고 d로 시작하는 행은 디렉토리에 대한 정보
를 제공합니다. 그 결과 grep은 디렉토리에 대한 정보만을 압축해서 화면에 보여주는 것입
니다. 일반 파일에 대한 정보만을 얻기 위해 똑같은 방법을 사용할 수 있습니다.
grep "^-" out
grep은 -로 시작하는 행에 대해서만 표시해주는데 -는 파일을 가리킵니다.
참고:정규 표현식은 한 행 이상과 대응하지 않는 다.
grep은 항상 한번에 한 행씩 찾습니다. 어떤 한 행에서 시작하고 다른 행에서는 끝나는 문
자열을 찾으라고 grep에 지정할 수 없습니다.