본문 바로가기

리눅스

리눅스 sed 명령어

728x90

sed 명령어

sed는 스트림 에디터(stream editor)로서, 텍스트 파일을 처리하고 수정하는데 사용하는 명령어입니다.

 

기본적인 sed 사용법

sed [옵션] '명령어' 파일명

여기서, 명령어는 주로 패턴 매칭(pattern matching)을 통해 문자열을 찾고, 이에 대해 특정 동작을 수행하는 것입니다.

예를 들어, 다음 명령어는 sample.txt 파일에서 "hello" 문자열을 "hi"로 변경합니다.

sed 's/hello/hi/g' sample.txt

위 명령어에서 s는 substitute의 약자로, 문자열 대체를 수행하는 명령어입니다. 여기서 hello는 대체하고자 하는 패턴, hi는 대체할 문자열이며, g는 전체 문자열에서 패턴에 매칭되는 모든 문자열을 찾아 대체하라는 옵션입니다.

 

다른 sed 명령어의 예시로는 다음과 같습니다.

 

  • 파일 내용 출력하기
sed 'p' sample.txt
  • 특정 행 출력하기
sed -n '5p' sample.txt
  • 특정 행 범위 내의 문자열 치환
sed '2,5 s/hello/hi/g' sample.txt
  • 정규식을 이용한 패턴 매칭 및 삭제
sed '/hello/d' sample.txt
  • 특정 패턴 다음에 문자열 추가
sed '/hello/a hi there' sample.txt

위와 같이 다양한 옵션을 사용하여 텍스트 파일을 처리하고 수정할 수 있습니다. sed는 텍스트 파일 처리와 수정에 유용한 도구 중 하나이며, 자세한 사용 방법과 옵션에 대한 정보는 man 페이지에서 확인할 수 있습니다.

공백문자 파이프라인으로 치환

sed -i "s/[[:space:]]/|/g" 1.tlb
sed -r "s/\s+/\|/g" 1.tlb > 1.tmp
![:alnum:] ![a-z A-Z 0-9], 모든 알파벳 문자와 숫자
![:alpha:] ![a-z A-Z], 모든 알파벳 문자
![:blank:] 스페이스 문자와 탭문자
![:cntrl:] 모든 컨트롤 문자들
![:digit:] 숫자, ![0-9]
![:graph:] 모든 visible 문자들
![:lower:] 알파벳 소문자, ![a-z]
![:print:] Non-control 문자
![:space:] 공백문자
![:upper:] 알파벳 대문자, ![A-Z]
![:xdigit:] 16진수 문자![0-9 a-f A-F]
728x90

 

아파치 환경 설정(httpd.conf) 파일 편집

'IfModule mime_module.*' 문자열 검색 후 'AddType application/x-httpd-php-source .phps' 추가

sed -i 's,\(IfModule mime_module.*\),\1\n\tAddType application/x-httpd-php .htm .html .php .ph .phtml .inc,g;' /usr/local/apache2/conf/httpd.conf
sed -i 's,\(IfModule mime_module.*\),\1\n\tAddType application/x-httpd-php-source .phps,g;' /usr/local/apache2/conf/httpd.conf
$ cat /usr/local/apache2/conf/httpd.conf
<IfModule mime_module>
        AddType application/x-httpd-php-source .phps
        AddType application/x-httpd-php .htm .html .php .ph .phtml .inc
    #
    # TypesConfig points to the file containing the list of mappings from
    # filename extension to MIME-type.
    ...

 

레디스 환경 설정(redis.conf) 파일 편집

  • sed 명령어로 /etc/redis/redis.conf 파일의 라인 중 dir로 시작하는 라인을 찾아 해당 라인을 주석 처리하고, 새로운 dir /data 라인을 추가
sed -i 's/^\(dir .*\)$/# \1\ndir \/data/' /etc/redis/redis.conf

 

CentOS 리포지토리(CentOS-Base.repo) 파일 편집

sed -i.backfile -re "s/^(mirrorlist(.*))/#\1/g" CentOS-Base.repo
sed -i.backfile -re "s/^#baseurl/baseurl/g" CentOS-Base.repo
sed -i.backfile -re "s/http:\/\/mirror.centos.org/https:\/\/mirror.kakao.com/g" CentOS-Base.repo

 

MySQL 덤프(mysqldump.sql) 파일 편집

  • mysqldump.sql 파일에서 CREATE TABLE user`` 패턴을 가진 라인을 출력하고 해당 라인의 라인 번호를 함께 표시
cat mysqldump.sql | egrep -n -i '^CREATE TABLE `user`'
  • mysqldump.sql 파일에서 66350번째 줄부터 66450번째 줄까지의 내용을 추출하여 user_table.txt 파일로 저장
sed -n '66350,66450p' mysqldump.sql > user_table.txt
  • sed를 사용하여 66350부터 66450까지의 라인을 mysqldump.sql 파일에서 삭제
sed -i '66350,66450d' mysqldump.sql

 

728x90