연결된 자습서의 메모장 ++에서와 같이 여러 파일에서 특정 텍스트를 찾아 바꾸는 방법을 알고 싶습니다.
연결된 자습서의 메모장 ++에서와 같이 여러 파일에서 특정 텍스트를 찾아 바꾸는 방법을 알고 싶습니다.
답변:
여기서는 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
...;) 의 명령 줄을 생각 나게합니다 .