해당 포스트는 sed linux 명령어를 이해하기 위해서 아래의 포스트를 해석하며 내용 정리 및 추가한 것입니다.
https://likegeeks.com/sed-linux/
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 명령어를 적용한 것으로 여기서 s 는 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번째 줄까지 적용된다.
범위를 지정할 때 특정 줄로부터 마지막까지 지정하고 싶은 경우 마지막 라인은 숫자대신 $으로 표현할 수 있다.
'공부 > 코딩 개념정리' 카테고리의 다른 글
[Python] csv 파일 처리의 모든 것 (0) | 2021.05.01 |
---|---|
[C++] 1차원, 2차원 벡터 초기화 (1D 2D vector initialization) (0) | 2021.03.17 |
[프로그래밍] 메모이제이션 이해하기 (0) | 2021.01.01 |
[shell programming] awk linux 명령어 이해하기 (0) | 2020.12.29 |
[C++] 함수에 vector 전달하기 (0) | 2020.04.08 |
댓글