[리눅스 명령] sed 명령어 이해와 활용 !

출처:

http://www.gnu.org/software/sed/

http://www.gnu.org/software/sed/manual/sed.html

소개

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을 뱉어냅니다.

아래 명령은 모두 같은 기능의 명령입니다.

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

=> 정규표현 /^foo/ 에 일치하는 모든 라인을 삭제하고, 모든 'hello'를 'world'로 교체합니다.

댓글

Designed by JB FACTORY