7장. 중급 셸 도구 I
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
이제 레퍼토리를 확장할 차례입니다. 이 장의 레시피에서는 셸의 일부가 아니지만 매우 유용해서 셸 없이 사용하는 것을 상상하기 어려운 몇 가지 유틸리티를 사용합니다.
Unix(그리고 Linux)의 가장 중요한 철학 중 하나는 작은(즉, 범위가 제한된) 프로그램 조각을 조합하여 강력한 결과를 제공할 수 있다는 것입니다. 모든 일을 하는 하나의 프로그램이 아니라 각각 한 가지 일을 잘하는 여러 가지 프로그램이 있습니다.
이는 bash에도 적용됩니다. 점점 커지고 기능이 풍부해지긴 했지만 여전히 모든 작업을 수행하려고 하지는 않으며, bash를 확장하여 작업을 수행할 수 있더라도 다른 명령을 사용하여 작업을 수행하는 것이 더 쉬운 경우가 있습니다.
간단한 예로 ls 명령을 들 수 있습니다. 현재 디렉터리의 내용을 보기 위해 ls를 사용할 필요는 없습니다. 그냥 echo * 이라고 입력하면 파일 이름이 표시됩니다. 또는 bash printf 명령과 일부 서식 등을 사용하여 더 멋지게 만들 수도 있습니다. 하지만 이는 셸의 목적이 아니며, 이미 누군가가 파일 시스템 정보의 모든 종류의 변형을 처리하는 목록 프로그램(ls)을 제공했습니다.
더 중요한 것은 bash가 더 많은 파일 시스템 목록 기능을 제공할 것으로 기대하지 않음으로써 추가적인 기능 크립 압박을 피하고 대신 어느 정도 독립성을 부여하여, 모든 bash 버전을 업그레이드하지 않고도 새로운 기능을 출시할 수 있다는 점입니다.
철학은 이제 그만하고 실용적인 이야기로 돌아가겠습니다.
여기에는 가장 유용한 세 가지 텍스트 관련 유틸리티인 grep, sed, awk가 있습니다.
grep 프로그램은 문자열을 검색하고, sed 프로그램은 파이프라인을 통과하는 텍스트를 편집하는 방법을 제공하며, awk는 그 자체로 흥미로운 괴물이자 Perl의 선구자이자 카멜레온 같은 존재로 사용 방법에 따라 상당히 다르게 보일 수 있습니다.
이러한 유틸리티와 다음 장에서 설명할 몇 가지 유틸리티는 대부분의 셸 스크립트에서 매우 중요한 부분을 차지하며 대부분의 세션에서 명령을 입력하는 데 사용됩니다. 셸 스크립트에서 작업할 파일 목록이 필요한 경우 find 또는 grep을 사용하여 파일 목록을 제공하고, 셸 스크립트의 일부 단계에서 입력을 구문 분석하거나 출력 형식을 지정하는 데 sed 및/또는 awk를 사용할 가능성이 높습니다.
다시 말해, 스크립팅 예제가 실제 문제를 해결하려면 실제 bash 사용자와 프로그래머가 실제로 사용하는 더 광범위한 도구를 사용해야 한다는 뜻입니다.
7.1 파일에서 문자열 검색하기
문제
하나 이상의 파일에서 모든 문자열을 찾아야 합니다.
솔루션
grep 명령은 파일을 검색하여 사용자가 입력한 표현식을 찾습니다:
$ grep printf *.c both.c: printf("Std Out message.\n", argv[0], ...