Computer >> 컴퓨터 >  >> 스마트폰 >> Linux

Linux 명령줄 마술 – 찾기 및 바꾸기

이 가이드는 Linux를 사용하는 동안 파일 및 디렉토리에서 단어, 문자열 또는 구를 찾고 바꾸는 방법을 보여줍니다.

Linux 명령줄에서 작업할 때 특정 텍스트를 다른 텍스트로 바꿔야 하는 큰 파일이나 많은 수의 파일을 발견하면 텍스트의 각 인스턴스를 찾아 붙여넣는 데 약간의 시간이 소요될 수 있습니다. 자, 더 이상 걱정하지 마십시오. Linux에는 당신을 위한 솔루션이 있습니다. 다음은 하나 이상의 파일에서 자동으로 텍스트 문자열을 찾고 바꾸는 방법입니다.

이 연습의 목적을 위해 "sed"라는 Linux 명령줄 도구를 사용합니다. "sed"는 매우 강력하고 다재다능한 도구이며 그 기능에 대해 많이 쓸 수 있습니다. 우리는 여기서 "sed"의 매우 제한된 측면을 사용하고 있습니다. 이 부분이 흥미롭다면 "sed"에 대해 좀 더 읽어보길 권합니다.

다음 구문을 사용하여 파일에서 텍스트 문자열을 찾아서 바꿀 것입니다.

# sed -i 's/[orginal_text]/[new_text]/' filename.txt

데이터베이스 서버의 IP 주소 인스턴스가 많이 포함된 "database.txt"라는 파일이 있다고 가정합니다. 방금 새 데이터베이스 서버로 전환했으며 새 서버의 IP 주소로 업데이트해야 합니다. 이전 IP 주소는 192.168.1.16이고 새 IP 주소는 192.168.1.22입니다. 방법은 다음과 같습니다.

# 고양이 데이터베이스.txt
LOCAL_DATABASE =192.168.1.16
LOCAL_DIR =/home/calvin/
PROD_DB =192.168.1.16

sed -i 's/192.168.1.16/192.168.1.22/g' database.txt
# cdatabase.txt에서
LOCAL_DATABASE =192.168.1.22
LOCAL_DIR =/home/calvin/
PROD_DB =192.168.1.22

이제 "database.inc" 파일을 열고 새 IP 주소가 이전 IP 주소를 대체했는지 확인하십시오. 다음은 위 명령의 분해입니다. 먼저 "sed" 명령을 호출합니다. 그런 다음 "대신에"를 나타내는 "-" 매개변수를 전달합니다. 이제 다음 비트에 대해 일반적으로 'regex'라고 하는 약간의 정규 표현식을 사용합니다. 인용된 문자열의 "s"는 "대체"를 나타내고 끝에 "g"는 "글로벌"을 나타냅니다. 그들 사이에 "그들 사이에 배치한 텍스트 문자열의 전역 대체"가 발생합니다.

선택적으로 끝에 "g"를 건너뛸 수 있습니다. 이는 대체가 전역적이지 않다는 것을 의미하며, 실제로 한 줄에 있는 문자열의 첫 번째 인스턴스만 대체하는 것으로 해석됩니다. 따라서 바꾸려는 텍스트의 여러 인스턴스가 있는 행이 있는 경우 다음과 같이 됩니다.

# 고양이 데이터베이스.txt
LOCAL_DATABASE =192.168.1.16
LOCAL_DIR =/home/calvin/
PROD_DB =192.168.1.16, 192.168.1.16

sed -i 's/192.168.1.16/192.168.1.22/'database.txt
# 고양이 데이터베이스.txt
LOCAL_DATABASE =192.168.1.22
LOCAL_DIR =/home/calvin/
PROD_DB =192.168.1.22, 192.168.1.16

여기 진짜 마법이 온다. 이제 단일 파일뿐만 아니라 현재 있는 전체 디렉토리에서 텍스트 문자열을 변경하고 싶다고 가정해 보겠습니다. "와인"을 찾아 "샴페인"으로 바꿔야 하는 텍스트 파일이 많이 있습니다. .

# 찾습니다. -maxdepth 1 -이름 "*.txt" -유형 f -exec sed -i 's/wine/champagne/' {} \

find 명령을 사용하여 현재 디렉토리의 모든 텍스트 파일 목록을 가져옵니다. 그것은 "찾아라. -maxdepth 1 -이름 "*.txt" -유형 f" 부분. "찾기 . maxdepth 1”은 컴퓨터에게 현재 디렉토리를 보고 현재 디렉토리보다 더 깊이 들어가지 않도록 지시합니다. '-name' '*.txt'' 부분은 find에 확장자가 '.txt'인 파일만 나열하도록 지시합니다. 그런 다음 "-type f" 섹션은 "찾기"가 정확히 일치하는 파일만 선택해야 한다고 지정합니다. 마지막으로 "-exec" 부분은 "find"가 다음 명령을 실행하도록 지시합니다. 이 경우 "sed -i 's/wine/champagne/' 텍스트를 대체하는 "sed" 명령입니다. {} \ ".

이제 파일에서 항목을 찾고 바꿀 수 있으므로 다른 Linux 팁을 확인하세요. :)