[리눅스 명령] sed 명령어 이해와 활용 !
- OS/Linux
- 2019. 3. 19. 11:16
출처:
소개
sed (stream editor) 는 비 대화형 명령줄 텍스트 에디터입니다.
sed는 스트림 에디터(Stream editor)로 입력 스트림으로 (파이프라인으로부터의 파일이나 입력으로) 기본 텍스트 변환을 수행하기 위해 사용됩니다. 스크립트 편집(ed와 같은)을 허용하는 에디터와 유사하지만, sed는 오직 한 번의 입력을 통과시키기 때문에 훨씬 효율적입니다. 파이프라인의 텍스트를 필터링하는 sed의 기능은 다른 유형의 편집기와 구별됩니다.
sed 미리보기
sed SCRIPT INPUT_FILE...
input.txt에 있는 모든 'hello'를 'world'로 바꾸고 싶다면:
sed 's/hello/world/' input.txt > output.txt
INPUTFILE을 명시하지 않거나 INPUTFILE이 - 라면, sed는 표준 입력의 내용을 필터링합니다.
아래 명령은 모두 같은 동작을 수행합니다:
sed 's/hello/world/' input.txt > output.txt
sed 's/hello/world/' < input.txt > output.txt
cat input.txt | sed 's/hello/world/' - > output.txt
sed는 출력을 표준 출력으로 내보냅니다. 표준 출력으로 내보내지 않고 파일이 바로 변경되도록 하려면 -i 옵션을 사용하면 됩니다. 다른 파일에 출력을 쓰기 위해 w와 s///w 명령을 보세요. 아래 명령은 file.txt 를 변형하고 어떤 출력도 내보내지 않습니다:
sed -i 's/hello/world/' file.txt
디폴트로 sed는 수행한 모든 입력을 출력합니다. (d와 같은 명령에 의해서 수정되거나 삭제된 입력을 제외하고). 출력을 조절 -n을 사용하세요. 특정 라인을 출력하기 위해 p 명령을 사용하세요. 아래 명령은 입력 파일의 45번째 줄만을 출력합니다:
sed -n '45p' file.txt
sed는 다수의 입력 파일을 하나의 긴 스트림으로 처리합니다. 아래 예는 첫번째 파일 (one.txt)의 첫번째 라인을 출력합니다. 그리고 마지막 파일 (three.txt) 의 마지막 라인을 출력합니다. 이 것을 뒤집기 위해 -s를 사용하세요.
sed -n '1p ; $p' one.txt two.txt three.txt
-e이나 -f 옵션 없이, sed는 첫번째 옵션이 없는 매개변수를 스크립트로 사용하고, 다음의 옵션이 없는 매개변수를 입력파일로 사용합니다. 만약 -e나 -f 옵션이 스크립트를 정의하기 위해 사용되었다면, 옵션이 없는 모든 파라미터들은 입력 파일로 받아집니다. 옵션 -e와 -f는 결합될 수 있고, 여러 번 나타날 수도 있습니다. (이 경우 최종 스크립트는 모든 개별 스크립트를 연결한 것입니다.)
아래 예는 모두 같은 명령입니다:
sed 's/hello/world/' input.txt > output.txt
sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt
echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
sed script 미리보기
sed '30,35d' input.txt > output.txt
=> input.txt의 30~35라인을 삭제하여 output.txt에 출력합니다.
sed '/^foo/q42' input.txt > output.txt
=> input.txt에서 'foo'로 시작하는 라인을 찾을 때까지 출력하다가, 찾으면 종료상태 42를 뱉으며 종료합니다. 찾지 못할 경우, 종료상태 0을 뱉어냅니다.
아래 명령은 모두 같은 기능의 명령입니다.
=> 정규표현 /^foo/ 에 일치하는 모든 라인을 삭제하고, 모든 'hello'를 'world'로 교체합니다.sed '/^foo/d ; s/hello/world/' input.txt > output.txt
sed -e '/^foo/d' -e 's/hello/world/' input.txt > output.txt
echo '/^foo/d' > script.sed echo 's/hello/world/' >> script.sed sed -f script.sed input.txt > output.txt
echo 's/hello/world/' > script2.sed sed -e '/^foo/d' -f script2.sed input.txt > output.txt
'OS > Linux' 카테고리의 다른 글
[Linux] SSH 설치 및 연결 설정하기 (0) | 2019.04.05 |
---|---|
[Linux] 디스크 사용량 확인 (du / df) (0) | 2019.04.02 |
[리눅스] 우분투에 wp2txt 설치하기 ! (0) | 2019.03.20 |
[리눅스 QA] 리눅스에서 bz2 파일 압축 해제하기 ! (0) | 2019.03.20 |
[리눅스 QA] 우분투에서 7z 파일 압축 해제하기 ! (0) | 2019.03.19 |