[쉘스크립트] 텍스트 처리를 위한 쉘 명령어

본 문서는 실무를 하면서 자주 쓰는 리눅스 쉘 명령어 소개하기 위한 목적이 있습니다.

cat 명령어

cat 명령어는 concatenate의 줄임말입니다. 리눅스에서 빈번하게 사용하는 파일 보기 명령어입니다.

기본 문법으로 파일 내용 출력가 있습니다.

$ cat <file-name>

파일 내용을 출력해 특정 파일명으로 저장 할 수 있습니다.

$ cat <file-name> > <output-file-name>

여러 파일 출력이 가능합니다.

cat sample1.txt sample2.txt > sample3.txt

파일 내용 출력시 -n 옵션을 추가하면 줄번호 표시가 가능합니다.

cat -n <file-name>

grep 명령어와 조합해서 무자열 필터에 사용할 수 있습니다.

$ cat <file-name> | grep -E "<tag>[a-zA-Z ]+</tag>" > <output-file-name>

grep에서 -E 옵션은 확장 정규식 옵션으로 정규식을 이용해 문자열을 찾습니다.

Sed

***sed(stream editor)***은 편집기 입니다. ed 명령어와 grep 명령어를 일부 합친 명령어입니다.$/

명령어 옵션

  • a : 현재 행에 하나 이상의 새로운 행을 추가
  • c : 현재 행의 내용을 새로운 내용으로 바꿈
  • d : 행을 삭제
  • i : 현재 행의 위에 삽입
  • l : 출력되지 않는 특수문자를 출력
  • n : 다음 입력 행을 첫 번째 명령어가 아닌 다음 명령어에서 처리
  • p : 행을 출력
  • q : sed를 종료
  • r : 파일로부터 행을 읽어옴
  • ! : 선택된 줄을 제외한 나머지 전체 줄에 명령어 적용
  • s : 문자열을 치환한다.

옵션

  • -e : 다중 편집시 사용
  • -f : sed 스크립트 파일 지정에 사용
  • -n : 출력을 생략

명령어 예시는 다음과 같습니다.

sed '/hello/d' 1.html : hello 문자가 포함된 줄을 삭제하여 출력
sed '/hello/!d' 1.html : hello 문자가 있는 줄만 제외 하고 삭제
sed '1,2d' 1.html : 처음 1줄, 2줄을 지움
sed '/^$/d 1.html : 빈줄을 삭제:

sed 명령어는 치환해 유용합니다. /s은 치환을 의미합니다. /g을 추가하면 전역 치환을 수행한다는 의미입니다.

sed 's/foo/bar/g' hello.txt

옵션으로 -i를 추가하면 변경 내용을 실재 반영해 저장 한다는 의미입니다. 아래 명령어를 입력하면 의 내용중 “foo"라는 문자열을 “bar"로 치환합니다.

sed -i 's/foo/bar/g' <file-name>

숨김줄 제거 명령어입니다.

sed -i 's/\r//' <file-name>

만약 텍스트 파일에서 중복 줄을 제거하려면 sort 명령어를 이용합니다.

sort -u <file-name>