여러 파일 내에서 텍스트 찾기 및 바꾸기 같이 여러 파일에서 특정 텍스트를 찾아

연결된 자습서의 메모장 ++에서와 같이 여러 파일에서 특정 텍스트를 찾아 바꾸는 방법을 알고 싶습니다.

예 : http://cybernetnews.com/find-replace-multiple-files/



답변

여기서는 sed를 사용하여 / home / user / directory / 디렉토리에 확장자 c가있는 모든 파일에서 “cybernetnews”라는 단어를 “cybernet”으로 바꿉니다.

find /home/user/directory -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;

실행 디렉토리에서 재귀 적으로 검색하고 읽기 쉽고 쓰기 가능한 일반 파일에서만 작동하는보다 일반적인 변형 :

find ./ -type f -readable -writable -exec sed -i "s/cybernetnews/cybernet/g" {} \;


답변

sed 스트림 편집기는 이런 종류의 작업을위한 강력한 유틸리티이며 나의 첫 번째 선택이지만 Ubuntu 기반 기본 응용 프로그램을 사용하여 일반 텍스트 편집기 에서이 작업을 수행하려면 Jedit를 살펴 보는 것이 좋습니다. , 저장소에서 사용 가능하며 콘솔에 입력하여 설치할 수 있습니다.

sudo apt-get install jedit

jedit를 시작하고 검색 메뉴 항목을 클릭 한 다음 메뉴 목록에서 Search in Directory 항목을 클릭하면 아래 대화 상자가 나타납니다.

폴더에서 Jedit 검색 대화 상자

이것은 메모장 ++의 그것과 유사하며 똑같은 일을합니다. 나는 이것이 당신이 원하는 것이라고 생각합니다.


답변

다른 GUI 옵션은 regexxer입니다 .
regexxer 스크린 샷


답변

perl -pi -e 's/oldtext/newtext/g' *

현재 폴더의 모든 파일에서 oldtext를 newtext로 바꿉니다. 그러나 백 슬래시를 사용하여 oldtext 및 newtext 내의 모든 perl 특수 문자를 이스케이프해야합니다.


답변

Geany로 확인하면 Linux를위한 완벽한 NPP 교체입니다. 정확하게 할 수 있고 정규 표현식을 사용할 수 있습니다.


답변

나는 이것에 대한 작은 스크립트를 썼다. 기본 사항 만 필요하고 sed 등에 익숙하지 않은 경우 여기를 살펴보십시오. http://www.csrdu.org/nauman/2010/12/30/bash-script-to-find-and-replace-in 파일 세트 /

스크립트는 다음과 같습니다.

for f in submit_*;
  do sed "s/old_db_name/new_db_name/" < $f > a_$f ;
  mv a_$f $f ;
done


답변

이 스크립트를 사용하여 코드를 복사하고 파일을 만들 수 있습니다 find_and_replace_in_files.sh.

나는 그것을 약간 수정했다. 당신의 의견을 말 해주세요.

# *****************************************************************************************
# find_and_replace_in_files.sh
# This script does a recursive, case sensitive directory search and replace of files
# To make a case insensitive search replace, use the -i switch in the grep call
# uses a startdirectory parameter so that you can run it outside of specified directory - else this script will modify itself!
# *****************************************************************************************

!/bin/bash
# **************** Change Variables Here ************
startdirectory="/your/start/directory"
searchterm="test"
replaceterm="test=ok!"
# **********************************************************

echo "***************************************************"
echo "* Search and Replace in Files Version 01-Aug-2012 *"
echo "***************************************************"

i=0;

  for file in $(grep -l -R $searchterm $startdirectory)
    do
      cp $file $file.bak
      sed -e "s/$searchterm/$replaceterm/ig" $file > tempfile.tmp
      mv tempfile.tmp $file

    let i++;

      echo "Modified: " $file
    done

echo " *** All Done! *** Modified files:" $i