때와 작업하는 텍스트 파일은,당신은 종종 찾을 필요가 및 대체 텍스트 문자열에서 하나 이상의 파일로 구성됩니다.
sed
는 스트림 편집기입니다. 파일 및 파이프 라인과 같은 입력 스트림에 대한 기본 텍스트 조작을 수행 할 수 있습니다. sed
를 사용하면 단어와 줄을 검색,찾기 및 바꾸기,삽입 및 삭제할 수 있습니다. 복잡한 패턴을 일치시킬 수있는 기본 및 확장 정규 표현식을 지원합니다.,
이 기사에서는 문자열을 찾아sed
로 바꾸는 방법에 대해 설명합니다. 또한 재귀 검색을 수행하고 대체하는 방법을 보여 드리겠습니다.
Sed 로 문자열 찾기 및 바꾸기#
sed
의 여러 버전이 있으며 그 사이에 몇 가지 기능적 차이가 있습니다. macOS 는 BSD 버전을 사용하지만 대부분의 Linux 배포판에는 gnused
가 기본적으로 사전 설치되어 있습니다. GNU 버전을 사용하겠습니다.,
일반적인 형태의 검색 및 대체 텍스트를 사용하는sed
형식은 다음과 같습니다.
sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE
-i
-기본적으로sed
쓰기로 출력을 표준 출력됩니다. 이 옵션은sed
에서 파일을 편집하도록 지시합니다. 확장자가 제공된 경우(ex-i.bak)원본 파일의 백업이 생성됩니다.s
-대체 명령,아마도 sed 에서 가장 많이 사용되는 명령 일 것입니다./ / /
-구분 기호 문자., 모든 문자가 될 수 있지만 일반적으로 슬래시(/
)문자가 사용됩니다.SEARCH_REGEX
-일반 문자열 또는 검색 할 정규식.REPLACEMENT
-대체 문자열.g
-글로벌 교체 플래그. 기본적으로sed
읽어 파일이 라인에 의해 라인의 변화만의 첫 번째 항목SEARCH_REGEX
입니다. 대체 플래그가 제공되면 모든 발생이 대체됩니다.,INPUTFILE
-명령을 실행할 파일의 이름입니다.
쉘 메타 문자가 확장되지 않도록 인수 주위에 따옴표를 넣는 것이 좋습니다.
보자를 사용할 수 있는 방법을sed
명령어를 검색 및 대체 텍스트 파일로 몇몇을의 그것의 가장 일반적으로 사용되는 옵션 플래그입니다.
데모 목적으로 다음 파일을 사용할 것입니다.
123 Foo foo foo foo /bin/bash Ubuntu foobar 456
경우에는g
국기를 생략하면,첫 번째 인스턴스의 검색이 문자열에서 각 라인체:
sed -i 's/foo/linux/' file.txt
123 Foo linux foo linux /bin/bash Ubuntu foobar 456
글로벌 교체 플래그는sed
대체의 모든 항목을 검색 패턴
sed -i 's/foo/linux/g' file.txt
123 Foo linux linuxlinux /bin/bash Ubuntu linuxbar 456
아시다시피 할 수 있습니다, 하위 문자열foo
안에foobar
문자열은 또한 대체에서 이전의 예입니다., 이것이 원하는 동작이 아닌 경우 검색 문자열의 양쪽 끝에 단어 경계 식(\b
)을 사용하십시오. 이렇게하면 부분 단어가 일치하지 않습니다.
sed -i 's/\bfoo\b/linux/g' file.txt
123 Foo linux linuxlinux /bin/bash Ubuntu foobar 456
패턴 일치를 만들기 위해 대소문자를 구분하지 않,사용하는I
플래그입니다., 아래 예에서 우리는 모두 사용하는g
및I
플래그:
sed -i 's/foo/linux/gI' file.txt
123 linux linux linux linux /bin/bash Ubuntu linuxbar 456
을 찾으려면으로 교체하는 문자열이 포함 구분 기호(/
) 당신을 사용할 필요가 백슬래쉬(\
)을 탈출합니다. 예를 들어 대체하는/bin/bash
/usr/bin/zsh
을 사용하는 것
sed -i 's/\/bin\/bash/\/usr\/bin\/zsh/g' file.txt
는 쉽고 훨씬 더 읽을 수 있는 옵션이 사용하는 다른 구분 기호 문자입니다., 대부분의 사람들이 사용하는 수직 바(|
)또는 콜론(:
)그러나 사용할 수 있는 다른 문자
sed -i 's|/bin/bash|/usr/bin/zsh|g' file.txt
123 Foo foo foo foo /usr/bin/zsh Ubuntu foobar 456
사용할 수도 있습니다 정규표현식이 있습니다. 예를 들어,을 검색하 모두 3 자리 숫자와 대체들과 함께 문자열number
을 사용합니다.
sed -i 's/\b\{3\}\b/number/g' file.txt
number Foo foo foo foo /bin/bash demo foobar number
의 또 다른 유용한 기능 sed 사용할 수 있는 앰퍼샌드 문자&
에 해당하는 일치하는 패턴이 있습니다., 문자는 여러 번 사용할 수있다.
경우,예를 들어,당신을 추가하려는 괄{}
주위에 각각 3 자리 숫자를 입력:
sed -i 's/\b\{3\}\b/{&}/g' file.txt
{123} Foo foo foo foo /bin/bash demo foobar {456}
마지막으로, 그것은 항상 좋은 아이디어를 만들 때 백업 파일을 편집sed
. 그렇게하려면-i
옵션에 백업 파일의 확장자를 제공하기 만하면됩니다., 예를 들어,편집file.txt
및 저장 원본 파일로file.txt.bak
을 사용합니다.
sed -i.bak 's/foo/linux/g' file.txt
하는지 확인 백업이 만들어진 목록은 파일과 함께ls
명령:
ls
file.txt file.txt.bak
재귀 찾을 수 있고 교체#
때때로 당신은 당신할 수 있습을 재귀적으로 검색 디렉토리를 파일에 문자열을 포함하고 있는 교체 문자열에 모든 파일이 있습니다., 를 사용하여 이 작업을 수행할 수 있습 다음과 같은 명령을find
또는grep
을 재귀적으로 파일을 찾을 디렉토리와 배관 파일 이름을sed
.
다음과 같은 명령을 재귀적으로 검색하는 파일에서 현재 작업 디렉터리 및 전달의 파일 이름을sed
.,
find . -type f -exec sed -i 's/foo/bar/g' {} +
문제를 방지하기 위해 파일을 포함하는 공간에서 자신의 이름,사용하는-print0
옵션을 알려주는find
인쇄하는 파일 이름 다음 null 문자 및 출력을sed
usingxargs -0
find . -type f -print0 | xargs -0 sed -i 's/foo/bar/g'
제외하고 디렉토리를 사용하여-not -path
옵션을 선택합니다.,arting 점(.
),사용:
find . -type f -not -path '*/\.*' -print0 | xargs -0 sed -i 's/foo/bar/g'
하려는 경우 검색 및 텍스트를 교체만으로 파일을 특정한 확장자를 사용:
find . -type f -name "*.md" -print0 | xargs -0 sed -i 's/foo/bar/g'
또 다른 옵션은 사용하는grep
명령을 재귀적으로 모든 파일을 찾을 포함하는 검색은 패턴이 관 파일 이름을sed
:
grep -rlZ 'foo' . | xargs -0 sed -i.bak 's/foo/bar/g'
결론#
보일 수 있지만 복잡하고 복잡한,처음에 검색하고 대체 텍스트 파일로sed
은 매우 간단합니다.,
sed
명령,옵션 및 플래그에 대한 자세한 내용을 보려면 GNU sed 매뉴얼 및 Grymoire sed 자습서를 방문하십시오.피>
Leave a Reply