웹사이트 검색

Linux 시스템 관리 작업을 위한 15가지 Sed 명령 팁


모든 시스템 관리자는 매일 일반 텍스트 파일을 처리해야 합니다. 특정 섹션을 보는 방법, 단어를 바꾸는 방법, 해당 파일의 콘텐츠를 필터링하는 방법을 아는 것은 Google 검색을 하지 않고도 편리하게 사용할 수 있는 기술입니다.

이 글에서는 잘 알려진 스트림 편집기인 sed를 검토하고 앞서 언급한 목표 등을 달성하기 위해 이를 사용하는 15가지 팁을 공유합니다.

Sed 명령이란 무엇입니까?

스트림 편집기의 약자인 'sed' 명령은 텍스트 스트림에서 작동하는 다재다능하고 강력한 텍스트 조작 도구로, 사용자가 검색, 바꾸기, 삽입 및 삽입과 같은 데이터에 대한 다양한 작업을 수행할 수 있도록 해줍니다. 삭제. 'Sed'는 정규식을 사용하여 텍스트 조작을 위한 패턴을 정의하며 일괄 편집 작업 및 스크립트의 텍스트 처리에 사용할 수 있습니다.

주목할만한 기능 중 하나는 파일을 직접 수정하거나 변경하는 동안 백업 복사본을 생성할 수 있는 내부 편집입니다. 'Sed'는 시스템 관리자, 프로그래머, 명령줄에서 텍스트 변환 및 데이터 조작 작업을 다루는 모든 사람에게 필수적인 도구입니다.

다음은 몇 가지 일반적인 'sed' 명령과 예시입니다:

1. 파일의 행 범위 보기

head 및 tail과 같은 도구를 사용하면 파일의 맨 아래나 맨 위를 볼 수 있습니다. 중간에 있는 섹션을 봐야 한다면 어떻게 해야 할까요? 다음 sed 한 줄짜리 코드는 tecmint.txt에서 5부터 10까지의 행을 반환합니다.

sed -n '5,10p' tecmint.txt

2. 특정 범위를 제외한 전체 파일 보기

반면에 특정 범위를 제외한 전체 파일을 인쇄하고 싶을 수도 있습니다. tecmint.txt에서 20부터 35까지의 행을 제외하려면 다음을 수행하십시오.

sed '20,35d' myfile.txt

3. 비연속적인 선과 범위 보기

연속되지 않은 일련의 줄이나 둘 이상의 범위에 관심이 있을 수 있습니다. tecmint.txt5-710-13 행을 표시해 보겠습니다.

sed -n -e '5,7p' -e '10,13p' tecmint.txt

보시다시피 -e 옵션을 사용하면 각 범위에 대해 지정된 작업(이 경우 줄 인쇄)을 실행할 수 있습니다.

4. 파일에서 단어나 문자열 바꾸기

tecmint.txt에서 version이라는 단어의 모든 인스턴스를 story로 바꾸려면 다음을 수행하세요.

sed 's/version/story/g' tecmint.txt

또한 대소문자를 무시하려면 g 대신 gi를 사용하는 것이 좋습니다.

sed 's/version/story/gi' myfile.txt

여러 개의 공백을 단일 공백으로 바꾸기 위해 파이프라인과 함께 ip Route show 명령의 출력을 사용합니다.

ip route show | sed 's/  */ /g'

파이프라인이 있는 경우와 없는 경우 ip Route show의 출력을 비교합니다.

5. 범위 내의 단어나 문자열 바꾸기

행 범위(예: 30 - 40) 내의 단어만 바꾸려면 다음을 수행할 수 있습니다.

sed '30,40 s/version/story/g' tecmint.txt

물론, 범위 대신 해당 번호를 통해 단일 라인을 나타낼 수도 있습니다.

6. 파일에서 주석 제거

때때로 구성 파일이 주석과 함께 로드됩니다. 이는 확실히 유용하지만 구성 지시문을 모두 한 눈에 보려면 가끔 구성 지시문만 표시하는 것이 도움이 될 수 있습니다.

Apache 구성 파일에서 빈 줄이나 #로 시작하는 줄을 제거하려면 다음을 수행하십시오.

sed '/^#\|^$\| *#/d' httpd.conf

캐럿 기호 다음에는 숫자 기호 (^#)가 옵니다. 이는 줄의 시작을 나타내는 반면, ^$는 빈 줄을 나타냅니다. 수직 막대는 부울 연산을 나타내는 반면 백슬래시는 수직 막대를 벗어나는 데 사용됩니다.

이 특별한 경우 Apache 구성 파일에는 일부 줄의 시작 부분이 아닌 #가 있는 줄이 있으므로 *#를 사용하여 해당 줄도 제거합니다.

7. 파일에서 대소문자를 구분하지 않는 단어 바꾸기

대문자나 소문자로 시작하는 단어를 다른 단어로 바꾸려면 sed를 사용할 수도 있습니다. 설명을 위해 tecmint.txt에서 zip 또는 Zip이라는 단어를 rar로 바꾸겠습니다.

sed 's/[Zz]ip/rar/g' tecmint.txt

8. 로그 파일에서 특정 이벤트 찾기

sed의 또 다른 용도는 주어진 정규 표현식과 일치하는 파일의 행을 인쇄하는 것입니다. 예를 들어 /var에 따라 7월 2일에 발생한 승인인증 활동을 확인하는 데 관심이 있을 수 있습니다. /log/secure CentOS 서버에 로그인합니다.

이 경우 검색할 패턴은 각 줄의 시작 부분에 있는 Jul 2입니다.

sed -n '/^Jul  1/ p' /var/log/secure

9. 파일에 공백이나 빈 줄 삽입하기

sed를 사용하면 파일의 비어 있지 않은 각 줄에 공백(빈 줄)을 삽입할 수도 있습니다. 일반 텍스트 파일인 LICENSE에 한 줄씩 빈 줄을 삽입하려면 다음을 수행하세요.

sed G tecmint.txt

두 개의 빈 줄을 삽입하려면 다음을 수행하십시오.

sed 'G;G' tecmint.txt

빈 줄을 더 추가하려면 대문자 G를 세미콜론으로 구분하여 추가하세요. 다음 이미지는 이 팁에 설명된 예를 보여줍니다.

이 팁은 대규모 구성 파일을 검사하려는 경우 유용할 수 있습니다. 줄마다 공백을 삽입하고 출력을 줄이면 더 읽기 쉬운 환경을 얻을 수 있습니다.

10. 파일에서 ^M 제거

dos2unix 프로그램은 일반 텍스트 파일을 Windows/Mac 형식에서 Unix/Linux로 변환하여 해당 플랫폼에서 사용되는 일부 텍스트 편집기에서 삽입한 숨겨진 개행 문자를 제거합니다. Linux 시스템에 설치되어 있지 않은 경우 설치하는 대신 sed를 사용하여 해당 기능을 흉내낼 수 있습니다.

왼쪽 이미지에서 나중에 다음을 사용하여 제거된 여러 DOS 개행 문자 (^M)를 볼 수 있습니다.

sed -i 's/\r//' myfile.txt

-i 옵션은 내부 편집을 나타냅니다. 그러면 변경 사항이 화면에 반환되지 않고 파일에 저장됩니다.

참고: Ctrl+VCtrl+M을 사용하여 Vim 편집기에서 파일을 편집하는 동안 DOS 개행 문자를 삽입할 수 있습니다.

11. Sed 명령으로 백업 파일 생성

이전 팁에서는 sed를 사용하여 파일을 수정했지만 원본 파일을 저장하지 않았습니다. 경우에 따라서는 원본 파일의 백업 복사본을 저장하는 것이 좋습니다.

그렇게 하려면 -i 옵션 뒤에 원본 파일의 이름을 바꾸는 데 사용할 접미사(작은따옴표 안)를 지정하십시오.

다음 예에서는 this 또는 This(대소문자 무시)의 모든 인스턴스를 myfile.txt의 해당 항목으로 바꾸고 저장합니다. 원본 파일은 myfile.txt.orig입니다.

마지막으로 diff 유틸리티를 사용하여 두 파일 간의 차이점을 식별합니다.

sed -i'.orig' 's/this/that/gi' myfile.txt

12. 파일에서 단어 쌍 전환하기

이름, 형식의 전체 이름이 포함된 파일이 있다고 가정해 보겠습니다. 파일을 적절하게 처리하려면 이름을 바꾸는 것이 좋습니다.

sed를 사용하면 꽤 쉽게 할 수 있습니다.

sed 's/^\(.*\),\(.*\)$/\, /g' names.txt

위 이미지에서 숫자 12와 마찬가지로 특수 문자인 괄호를 이스케이프해야 함을 알 수 있습니다.

다음 숫자는 강조 표시된 정규식을 나타냅니다(괄호 안에 표시되어야 함).

  • 1은 쉼표까지 각 줄의 시작을 나타냅니다.
  • 2는 줄 끝까지 쉼표 오른쪽에 있는 모든 항목에 대한 자리 표시자입니다.

원하는 출력은 SecondColumn() + 쉼표 + 공백 + FirstColumn 형식으로 표시됩니다. (이름). 원하는 대로 자유롭게 변경해 보세요.

13. 별도의 일치 항목이 있는 경우에만 단어 바꾸기

때로는 주어진 단어의 모든 인스턴스 또는 임의의 몇 가지 단어를 바꾸는 것이 정확히 우리에게 필요한 것이 아닙니다. 아마도 별도의 일치 항목이 발견되면 교체를 수행해야 할 수도 있습니다.

예를 들어 같은 줄에 services라는 단어가 있는 경우에만 startstop으로 바꿀 수 있습니다. 해당 시나리오에서는 다음과 같은 일이 발생합니다.

We need to start partying at work,
but let’s remember to start all services first.

첫 번째 줄에서는 startstop으로 바뀌지 않습니다. 두 번째 줄과 달리 해당 줄에는 services라는 단어가 표시되지 않기 때문입니다.

sed '/services/ s/start/stop/g' msg.txt

14. 한 번에 두 개 이상의 대체 수행

하나의 sed 명령으로 두 개 이상의 대체 항목을 결합할 수 있습니다. myfile.txt의 단어 that과 줄을 각각 Thisverse로 바꾸겠습니다.

일반적인 sed 대체 명령 뒤에 세미콜론과 두 번째 대체 명령을 사용하여 이 작업을 수행할 수 있는 방법에 유의하세요.

sed -i 's/that/this/gi;s/line/verse/gi' myfile.txt

이 팁은 다음 이미지에 설명되어 있습니다.

15. Sed와 기타 명령 결합

물론 더 강력한 명령을 생성하기 위해 sed를 다른 Linux 명령과 결합할 수 있습니다. 예를 들어, TIP #4에 제공된 예를 사용하여 ip Route 명령의 출력에서 IP 주소를 추출해 보겠습니다.

src라는 단어가 있는 줄만 인쇄하는 것으로 시작하겠습니다. 그런 다음 여러 공간을 단일 공간으로 변환하겠습니다. 마지막으로 IP 주소가 있는 9번째 필드를 잘라냅니다(단일 공백을 필드 구분 기호로 간주).

ip route show | sed -n '/src/p' | sed -e 's/  */ /g' | cut -d' ' -f9

아래 이미지는 위 명령의 각 단계를 보여줍니다.

요약

이 가이드에서는 일상적인 시스템 관리 작업에 도움이 되는 15가지 sed 팁과 요령을 공유했습니다. 정기적으로 사용하고 있으며 우리와 다른 커뮤니티와 공유하고 싶은 다른 팁이 있습니까?

그렇다면 아래의 의견 양식을 사용하여 알려주십시오. 질문이나 의견도 환영합니다. 여러분의 의견을 기다리겠습니다!