본문 바로가기
공부/코딩 개념정리

[shell programming] sed linux 명령어 이해하기

by 소소하지만유니크한 2020. 12. 29.
728x90

해당 포스트는 sed linux 명령어를 이해하기 위해서 아래의 포스트를 해석하며 내용 정리 및 추가한 것입니다.

https://likegeeks.com/sed-linux/

 

31+ Examples for sed Linux Command in Text Manipulation - Like Geeks

Linux text manipulation is awesome when using sed Linux command, we discuss substituting flags, replacing characters, deleting lines, Reading from a file

likegeeks.com

sed lunux 명령어 기본구조

sed linux 명령어는 지정해준 규칙에 따라 데이터 변경해준다.

명령어를 사용하기 위한 기본 구조는 아래와 같다.

$ sed options file 

 

Substituting Flags

1. sed lunux 명령어 표준입력에 적용하기

sed 명령어가 여기서 단순히 파일만을 다루는 것이 아니라, 아래와 같이 표준입력(stdin)에도 직접적으로 적용할 수 있다.

$ echo "Welcome to LikeGeeks page" | sed 's/page/website/'

위의 명령은 표준입력의 "Welcome to LikeGeeks page" 에 sed 명령어를 적용한 것으로 여기서 는 substitute의 줄임으로 첫번째 패턴 (page)를 두번째 패턴으(website)로 교체한다는 의미이다. 즉, 결과 화면은 "Welcome to LikeGeeks page" 에서 "page"가 "website"로 교체된 "Welcome to LikeGeeks website" 가 될 것이다.

 

2. sed lunux 명령어 파일에 적용하기 

앞에서 언급했듯이 sed 명령어는 파일도 조작할 수 있다.

$sed 's/test/another test/' ./myfile

위의 명령은 myfile 에 존재하는 모든 test 패턴을 another test로 변경할 것이다. 주의할 점은 끝나는 단어(혹은 문장)을 알려주기 위해 슬래쉬를 ('/')  꼭 사용해주어야한다. 그렇기 때문에 변경할 때 white space도 사용할 수 있다.

또한 주의할 점은 sed 명령어는 파일 자체를 변경하지 않고 바뀐 내용을 표준 출력(stdout)으로만 보여준다는 점이다. 변경된 데이터를 저장하고 싶을 때는 redirection을 이용하여 저장해주어야한다.

 

3. 변경 내용을 파일로부터 불러오기

변경할 내용이 많다면 파일로 저장하고 적용할 수 있다.

명령어 파일로 저장하기

$ cat mycommands

s/This/That/

s/test/another test/

$ sed -f mycommands myfile

mycommands 에 s와 함께 변경할 패턴들을 나열해주고, sed 명령어를 이용할 때 -f 옵션과 합께 파일을 적어주면 myfile에 적용되어 바뀐 내용을 확인할 수 있다. 

 

4. flags 추가하기

이제까지 command를 그냥 사용했다면 한 문장에서 첫번째로 등장하는 패턴만 변경될 것이다. 만약 문장에 등장하는 패턴을 모두 바꾸고 싶을 때는 flag를 적용하여 적용되는 범위를 바꿀 수 있다.

s/pattern/replacement/flags

4종류의 flag가 존재하며, 

  • g, 등장하는 모든 패턴에 적용.
  • A number, 적용하고 싶은 패턴의 갯수를 지정.
  • p, 바뀐 데이터와 바뀐 라인 함께 출력
  • w file: 결과를 파일로 저장한다.

예를 들어, myfile에 등장하는 모든 'test'라는 글자를 'another test'로 변경하고 싶을 경우 아래와 같이 사용한다.

$ sed 's/test/another test/g' myfile

만약 여기서 g 를 적지않았다면, 한 문장에 test가 두번 적혀있을 경우는 앞의 test만 another test로 변경된다.

 

또한, 변경할 패턴의 특정 횟수(2 번)를 지정하고 싶을 땐 아래와 같이 이용해야한다.

$ sed 's/test/another test/2' myfile

p를 사용할 경우 바뀐 라인과 전체 데이터가 중복으로 나오게 된다. 이럴 때, 아래와 같이 -n과 함께 사용하면 바뀐 라인만 볼 수 있다.

$ sed -n 's/test/another test/p' myfile

앞에서 언급했듯이 sed를 사용할 경우 이용되는 myfile의 내용은 변경되지않는다. 바뀐 내용을 저장할 경우는 redirection을 사용하는 방법을 제외하고 아래와 같이 w flag를 사용하면 변경된 데이터가 output이라는 이름으로 저장된다.

$ sed 's/test/another test/w output' myfile

 

5. 적용 범위 제한하기

기본적으로 sed 명령어는 파일 전체 범위에서 적용되지만, 이를 특정 라인으로 한정할 수 있다.

$ sed '2s/test/another test/' myfile

위 명령어는 2번째 줄에서만 적용된다.

$ sed '2,3s/test/another test/' myfile

위와 같이 범위로도 지정할 수 있으며 위의 명령어는 2번째에서 3번째 줄까지 적용된다.

범위를 지정할 때 특정 줄로부터 마지막까지 지정하고 싶은 경우 마지막 라인은 숫자대신 $으로 표현할 수 있다.

 

 

 

 

 

 

 

 

 

 

728x90

댓글