리눅스에서 하나의 문자열을 찾고 다음 문자열까지 출력하고 싶은데
데이터가 복잡하게 엮여있어 쉽지 않아서 찾아보니 sed 명령어를 통해서 원하는 값을 뽑을 수 있었다.
리눅스 sed 명령어를 사용해
1. 특정 문자가 포함된 라인 출력
2. 특정 문자가 포함된 라인부터 끝가지 출력
3. 특정 문자가 포함된 라인부터 다른 특정 문자가 포함된 라인까지 출력
할 수 있다.
우선 예를 들기 위해서 텍스트 파일 하나를 만들었다.
# cat sed.txt
Apple
Pear
Melon
Kiwi
Banana
Carrot
Durian
Egg
대충 만든 텍스트 파일을 가지고 놀기ㅎㅎ
특정 문자가 포함된 라인 출력하기
Melon이 포함된 라인을 출력하고 싶을 때 !
# sed -n '/Melon/p' sed.txt
Melon
n 옵션을 통해 Melon 이라는 문자열이 포함된 라인을 찾고 p 옵션을 통해 출력해준다.
주로 n 옵션과 p 옵션을 같이 사용한다.
특정 문자가 포함된 라인부터 끝까지 출력하기
Melon 이 포함된 라인부터 끝까지 출력하고 싶을 때 !
sed -n '/Melon/,$p' sed.txt
Melon
Kiwi
Banana
Carrot
Durian
Egg
n 옵션을 통해서 Melon 이 포함된 라인을 찾고
,(콤마) 를 통해서 범위를 지정해줄 수 있는데 ,(콤마) 다음에 $ 라는 문자를 써주었다.
여기서 $ 는 행의 끝을 의미한다고 한다.
따라서, Melon 이 포함된 라인부터 끝까지 출력해준다.
어 그럼, 단락이 있을 경우 어디까지 출력이 되는지 궁금해서 확인해봤다.
아까 대충 만든 텍스트 파일을 복사해서 단락을 나누고 몇 줄 더 추가했다.
# cat sed_add.txt
Apple
Pear
Melon
Kiwi
Banana
Carrot
Durian
Egg
Rice
Stew
Kimchi
Water
이제 다시 Melon 부터 $ 를 사용해서 행의 끝까지 출력해본다.
# sed -n '/Melon/,$p' sed_add.txt
Melon
Kiwi
Banana
Carrot
Durian
Egg
Rice
Stew
Kimchi
Water
확인해보니 단락 구분없이 출력되었다.
$ 는 텍스트 파일의 끝을 의미한다고 보면 될 것 같다.
아, 그리고 만약 php 와 같은 언어에서는 $ 를 변수로 인식하기 때문에
\$ 이렇게 앞에 역슬레쉬를 붙여줘야한다!
특정 문자가 포함된 라인부터 출력하기
Melon 이 포함된 라인부터 바나나가 포함된 라인까지 출력하고 싶을 때 !
# sed -n '/Melon/,/Banana/p' sed.txt
Melon
Kiwi
Banana
아까 말했듯이 ,(콤마) 를 통해서 범위를 지정해줄 수 있는데
Melon 이라는 문자부터 Banana 라는 문자까지 범위를 지정해줬다.
그래서 Melon이 포함된 라인부터 Banana 가 포함된 라인까지 출력되었다.
이번에는 sed 명령어를 사용해서 데이터에서 원하는 값을 뽑아봤는데
sed 명령어 말고도 다른 명령어를 사용해서 다양한 방법으로 원하는 값을 뽑을 수 있다는 점 ❗️
'리눅스 > Command' 카테고리의 다른 글
리눅스 free 명령어 (0) | 2021.12.25 |
---|---|
리눅스 grep 명령어 (0) | 2021.06.08 |
리눅스 find 명령어 (0) | 2020.12.13 |
리눅스 uniq 명령어 (0) | 2020.11.09 |
리눅스 sort 명령어 (2) | 2020.11.04 |