> 시스템 튜토리얼 > 리눅스 > 소개: LFCS의 기본 사항에서 sed를 사용하는 방법을 알아보세요.

소개: LFCS의 기본 사항에서 sed를 사용하는 방법을 알아보세요.

WBOY
풀어 주다: 2024-01-09 08:50:02
앞으로
737명이 탐색했습니다.
소개 Linux Foundation Certified System Administrator(LFCS)에게 유용한 또 다른 명령은 "sed"입니다. 원래는 "Streaming Editor"를 의미했습니다.

"sed" 명령은 파일을 스트림으로 편집할 수 있는 편집기입니다. 파일을 스트리밍하는 방법은 다른 명령에서 파일을 파이프(> 또는 |)하거나 "sed"에 직접 로드하는 것입니다.

이 명령은 파일이 표시되지 않고 시각적 편집이 허용되지 않는다는 점을 제외하면 다른 편집기와 동일하게 작동합니다. 스트림을 조작하기 위해 명령이 "sed"로 전달됩니다.

"sed"로 할 수 있는 기본 작업은 5가지입니다. 물론 "sed"는 매우 강력하고 다른 고급 기능도 있지만 5가지 기본 사항에만 집중하면 됩니다. 5가지 기능 유형은 다음과 같습니다.
검색
바꾸기
삭제
추가
변화/변형
명령 매개변수를 살펴보기 전에 기본 구문을 살펴봐야 합니다.

문법

"sed" 명령의 구문은 다음과 같습니다.

으아아아

이 문서에서는 해당 섹션에서 이러한 "옵션"을 다룹니다. "명령"은 정규식 검색 및 바꾸기 패턴일 수 있습니다. "sed"의 작동 방식과 기본 명령을 알아보려면 계속 읽어보세요. 앞서 언급했듯이 "sed"는 이 기사에서 다룰 더 많은 옵션이 포함된 매우 강력한 도구입니다.

예제 파일

터미널을 열면 "sed" 예시용 파일을 생성할 수 있습니다. 다음 명령을 실행합니다:

으아아아

이제 HOME 폴더에 grephelp.txt라는 파일이 있어야 합니다. 이 파일의 내용은 grep 명령에 대한 도움말 지침입니다.

검색

특정 문자열을 검색하는 것은 편집기의 일반적인 기능이며 "sed"에서 검색을 수행하는 것도 예외는 아닙니다.

검색을 수행하여 파일에서 문자열을 찾으세요. 기본 검색을 살펴보겠습니다.

예제 파일에서 PATTERN이라는 단어를 검색하려면 다음 명령을 사용합니다.

으아아아

참고: 명령을 잘라내어 붙여넣는 경우 작은따옴표를 키보드의 표준 작은따옴표로 바꿔야 합니다.

-n 매개변수는 모든 줄(p 명령으로 지정된 줄 제외)의 자동 인쇄를 억제하는 데 사용됩니다. 기본적으로 "sed"에 입력된 각 줄은 표준 출력(stdout)으로 인쇄됩니다. "-n" 옵션 없이 위 명령을 실행하면 일치하는 줄과 함께 원본 파일의 각 줄이 표시됩니다.

검색할 파일 이름은 "샘플 파일" 섹션에서 생성한 "grephelp.txt"입니다.

남은 부분은 's/PATTERN/PATTERN/p' 입니다. 이 섹션은 기본적으로 네 부분으로 나누어져 있습니다. s의 첫 번째 부분은 바꾸기 또는 검색 및 바꾸기를 수행하도록 지정합니다.

나머지 두 번째, 세 번째 부분은 패턴입니다. 첫 번째는 검색할 패턴이고, 마지막은 대체 스트림의 문자열과 일치하는 패턴입니다. 이 예에서는 PATTERN 문자열을 찾아 PATTERN으로 바꿉니다. 동일한 문자열을 찾아서 바꾸면 파일이 전혀 변경되지 않으며 화면에서도 변경되지 않습니다.

마지막 명령은 p입니다. 교체 후에 새 줄이 인쇄되도록 지정합니다. 물론, 같은 문자열이 교체되기 때문에 달라지는 것은 없습니다. -n 매개변수를 사용하여 인쇄 행을 억제했으므로 변경된 행은 p 명령을 사용하여 인쇄됩니다.

이 완전한 명령을 사용하면 검색을 수행하고 일치하는 결과를 볼 수 있습니다.

교체

특정 문자열을 검색할 때 새 문자열을 일치하는 문자열로 바꿀 수 있습니다. 문자열을 다른 문자열로 바꾸는 것은 매우 일반적인 작업입니다.

다음 명령을 사용하여 동일한 검색을 수행할 수 있습니다:

으아아아

이때 "PATTERN"이라는 문자열이 "Pattern"으로 변경되어 표시됩니다. cat grephelp.txt 명령을 사용하여 파일을 보면 파일이 변경되지 않은 것을 볼 수 있습니다. 이 변경은 화면의 출력에만 적용됩니다. 다음을 사용하여 출력을 다른 파일로 파이프할 수 있습니다.

으아아아

이제 grephelp1.txt라는 새 파일이 변경된 파일과 함께 존재하게 됩니다. p를 네 번째 옵션으로 남겨두면 대체된 문자열의 각 줄이 파일에서 두 번씩 반복된다는 문제가 있습니다. 또한 "-n" 매개변수를 제거하여 모든 행을 인쇄할 수 있습니다.

문자열을 동일한 문자열로 바꾸는 또 다른 방법은 & 기호를 사용하여 검색 문자열을 나타내는 것입니다. 예를 들어, s/PATTERN/&/p 명령은 동일한 효과를 갖습니다. 예를 들어 S를 추가하려면 s/PATTERN/&S/p 명령을 사용하여 문자열을 추가할 수 있습니다.

각 줄의 특정 패턴만 바꾸고 싶다면 어떻게 해야 하나요? 대체할 특정 일치 항목을 지정할 수 있습니다. 물론 각 행의 교체는 특정 숫자입니다. 예를 들어, 예제 파일에는 대시가 많이 있습니다. 일부 줄에는 대시가 두 개 이상 있으므로 각 줄의 두 번째 대시를 다른 문자로 바꿀 수 있습니다. 두 번째 대시를 각 줄에 별표 *로 바꾸는 명령은 다음과 같습니다.

으아아아

여기에서는 원본 s를 사용하여 교체를 수행합니다. 문자 - *로 대체됩니다. 2는 두 번째 줄이 존재하는 경우 각 줄에서 교체한다는 의미입니다. 명령 2를 생략하면 대시의 첫 번째 발생이 대체됩니다. 모든 줄의 대시 대신 첫 번째 대시만 대체됩니다.

한 줄의 모든 대시를 검색하고 별표로 바꾸려면 g 명령을 사용하세요.

으아아아

명령을 결합할 수도 있습니다. 두 번째부터 나타나는 대시를 바꾸려고 한다고 가정하면 명령은 다음과 같습니다.

sed 's/-/*/2g' grephelp.txt
로그인 후 복사

现在从第二个开始出现的破折号将被星号取代。

删除

搜索过程中有很多时候你可能想要完全删除搜索字符串。

例如,如果要从文件中删除所有破折号,你可以使用以下命令:

sed 's/-//g' grephelp.txt
로그인 후 복사

替换字符串为空白,因此匹配的字符串将被删除。

添加

当找到匹配时,你可以添加一行特定的文本,来使这行在浏览或打印中突出。

如果要在匹配后插入新行,那么使用 a 命令,后面跟上新行的字符串。还包括要匹配的字符串。例如,我们可以找到一个 --,并在匹配的行之后添加一行。新行的字符串将是 double dash before this line。

sed '/--/ a "double dash before this line"' grephelp.txt
로그인 후 복사

如果要在包含匹配字符串的行之前加上这行,请使用 i 命令,如下所示:

sed '/--/ i "double dash after this line"' grephelp.txt
로그인 후 복사
改变/变换

如果需要改变/变换一行,则可以使用命令 c。

假设我们有个有一些私人信息的文档,我们需要更改包含特定字符串的行。c 命令将改变整行,而不仅仅是搜索字符串。

假设我们想要阻止示例文件中包含单词 PATTERN 的每一行。更改的行将显示为 This line is Top Secret。命令是:

sed '/PATTERN/ c This line is Top Secret' grephelp.txt
로그인 후 복사

可以进行更改特定字母的大小写的转换。例如,我们可以使用命令 y 将所有小写 a 更改为大写 A,如下所示:

sed 'y/a/A/' grephelp.txt
로그인 후 복사

可以指定多个字母,如 abdg,如下命令所示:

sed 'y/abdg/ABDG/' grephelp.txt
로그인 후 복사

确保第二组字母与第一组字母的顺序相同,否则会被替换和转换。例如,字符串 y/a/D/ 将用大写 D 替换所有小写的 a。

就地更改

如果你确实要更改所使用的文件,请使用 -i 选项。

例如,要将 PATTERN 改为 Pattern,并对文件进行更改,则命令为:

sed -i 's/PATTERN/Pattern/' grephelp.txt
로그인 후 복사

现在文件 grephelp.txt 将被更改。-i 选项可以与上述任何命令一起使用来更改原始文件的内容。

练习这些命令,并确保你理解它们。“sed” 命令非常强大。

(题图:Pixabay,CC0)

위 내용은 소개: LFCS의 기본 사항에서 sed를 사용하는 방법을 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:linuxprobe.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿