연결된 자습서의 메모장 ++에서와 같이 여러 파일에서 특정 텍스트를 찾아 바꾸는 방법을 알고 싶습니다.
연결된 자습서의 메모장 ++에서와 같이 여러 파일에서 특정 텍스트를 찾아 바꾸는 방법을 알고 싶습니다.
답변:
여기서는 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" {} \;
cyber net news합니까? 이것을 어떻게로 변환 할 수 cyber net있습니까?
sed 스트림 편집기는 이런 종류의 작업을위한 강력한 유틸리티이며 나의 첫 번째 선택이지만 Ubuntu 기반 기본 응용 프로그램을 사용하여 일반 텍스트 편집기 에서이 작업을 수행하려면 Jedit를 살펴 보는 것이 좋습니다. , 저장소에서 사용 가능하며 콘솔에 입력하여 설치할 수 있습니다.
sudo apt-get install jedit
jedit를 시작하고 검색 메뉴 항목을 클릭 한 다음 메뉴 목록에서 Search in Directory 항목을 클릭하면 아래 대화 상자가 나타납니다.

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

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
또 다른 프로그램은 Searchmonkey 입니다.
SearchMonkey는 번거로운 찾기 / 그립을 매끄러운 사용자 인터페이스로 대체하여 위치 및 텍스트 일치 수량을 표시하는 마크 업을 신속하게 제공하는 경량 Gtk 애플리케이션입니다. 최종 사용자와 소프트웨어 개발자 모두에게 사용하기 쉽고 액세스하기 쉬운 검색 도구를 제공하는 것이 목표입니다.
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"
페도라에서 나를 위해 일합니다.
sed인스턴스를 실행 합니다! 따라서 CPU 시간 측면에서 훨씬 빠릅니다. 파일 액세스 시간이 제한적이므로 클럭 시간이 훨씬 빠르지는 않지만 시스템로드가 낮습니다. 참고 xargs로 단일 sed명령의 명령 줄에 파일 이름을 많이 넣을 수 있습니다. 경로 길이에 따라 사용 가능한 버퍼 크기가 채워집니다.
+대신 \;에 find오른쪽?
xargs, 당신 말이 맞아요. 에서 man find: -exec command {} +: ... The command line is built in much the same way that xargs.... git filter-branch...;) 의 명령 줄을 생각 나게합니다 .