Tôi muốn biết làm thế nào tôi có thể tìm và thay thế một văn bản cụ thể trong nhiều tệp như trong Notepad ++ trong hướng dẫn được liên kết.
ví dụ: http://cybernetnews.com/find-replace-mult Môn-files /
Tôi muốn biết làm thế nào tôi có thể tìm và thay thế một văn bản cụ thể trong nhiều tệp như trong Notepad ++ trong hướng dẫn được liên kết.
ví dụ: http://cybernetnews.com/find-replace-mult Môn-files /
Câu trả lời:
Ở đây tôi sử dụng sed để thay thế mọi lần xuất hiện của từ "cybernetnews" bằng "cybernet" trong mỗi tệp bằng phần mở rộng, c, trong thư mục, / home / user / thư mục /.
find /home/user/directory -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;
Một biến thể chung hơn trong đó bạn tìm kiếm đệ quy từ thư mục thực thi và chỉ hoạt động trên các tệp thông thường, có thể đọc, có thể ghi:
find ./ -type f -readable -writable -exec sed -i "s/cybernetnews/cybernet/g" {} \;
cyber net news
nào? Làm thế nào tôi có thể chuyển đổi này để cyber net
?
Trình chỉnh sửa luồng, sed, là một tiện ích mạnh mẽ cho loại công việc này và là lựa chọn đầu tiên của tôi, tuy nhiên, nếu bạn muốn làm điều này từ một trình soạn thảo văn bản thông thường bằng ứng dụng gốc dựa trên Ubuntu, tôi khuyên bạn nên xem Jedit , Nó có sẵn trong kho và có thể được cài đặt bằng cách gõ vào bảng điều khiển của bạn:
sudo apt-get install jedit
Bắt đầu jedit, nhấp vào mục menu tìm kiếm, trong danh sách menu, nhấp vào mục Tìm kiếm trong thư mục, bạn sẽ được trình bày với hộp thoại bên dưới:
Điều này tương tự như của Notepad ++ và thực hiện điều tương tự, tôi tin rằng đây là những gì bạn muốn.
sed
.
Một tùy chọn GUI khác là regexxer :
Kiểm tra với Geany , đây là sự thay thế NPP hoàn hảo cho Linux. Bạn có thể làm chính xác điều đó cộng với bạn có thể sử dụng regex.
Tôi đã viết một kịch bản nhỏ cho điều này. Nếu bạn chỉ cần những điều cơ bản và không quen thuộc với sed, v.v., hãy xem tại đây: http://www.csrdu.org/nauman/2010/12/30/bash-script-to-find-and-replace-in -a-set-of-files /
Kịch bản như sau:
for f in submit_*;
do sed "s/old_db_name/new_db_name/" < $f > a_$f ;
mv a_$f $f ;
done
Bạn có thể sử dụng tập lệnh này, sao chép mã và tạo một tập tin find_and_replace_in_files.sh
.
Tôi đã sửa đổi nó một chút; xin vui lòng cho tôi biết ý kiến của bạn.
# *****************************************************************************************
# 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
Một chương trình khác là Searchmonkey .
SearchMonkey là một ứng dụng Gtk nhẹ, nhằm mục đích thay thế find / grep rườm rà bằng giao diện người dùng bóng bẩy, nhanh chóng cung cấp một vị trí hiển thị đánh dấu và số lượng khớp văn bản. Mục tiêu là cung cấp một công cụ tìm kiếm đơn giản để sử dụng và có thể truy cập cho người dùng cuối và các nhà phát triển phần mềm.
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"
làm việc cho tôi trên fedora
sed
trường hợp! Vì vậy, nó là nhanh hơn nhiều về thời gian CPU. Bởi vì thời gian truy cập tệp sẽ bị giới hạn, tôi nghĩ rằng thời gian đồng hồ không nhanh hơn nhiều, nhưng cho tải hệ thống thấp hơn. Lưu ý xargs
sẽ đặt rất nhiều, như hàng trăm tên tập tin vào dòng lệnh của một sed
lệnh - điền kích thước bộ đệm có sẵn dựa trên độ dài của đường dẫn.
+
thay vì \;
trong find
, phải không?
xargs
, nhưng bạn đã đúng; từ man find
: -exec command {} +
: ... The command line is built in much the same way that xargs...
. Làm cho tôi nghĩ về các dòng lệnh của git filter-branch
...;)
Một giải pháp rất đơn giản: thay thế trong tất cả *.txt
các tệp trong thư mục string_1
bằng string_2
:
sed -i 's/string_1/string_2/g' *.txt
sed -i 's/string_1/string_2/g' $(grep -rEl 'string_1' ./)