Je veux savoir comment je peux trouver et remplacer un texte spécifique dans plusieurs fichiers, comme dans Notepad ++ dans le tutoriel lié.
par exemple: http://cybernetnews.com/find-replace-multiple-files/
text-editor
Faruk Uzun
la source
la source
Réponses:
Ici, j’utilise sed pour remplacer chaque occurrence du mot "cybernetnews" par "cybernet" dans chaque fichier portant l’extension c dans le répertoire / home / user / directory /.
Une variante plus générique dans laquelle vous effectuez une recherche récursive dans le répertoire d'exécution et ne travaillez que sur des fichiers normaux, lisibles et inscriptibles:
la source
cyber net news
? Comment puis-je convertir cela encyber net
?sed -i -e "s/cyber\snet\snews/cyber net/g"
L'éditeur de flux, sed, est un utilitaire puissant pour ce type de travail. C'est mon premier choix. Toutefois, si vous souhaitez utiliser un éditeur de texte ordinaire utilisant une application native basée sur Ubuntu, je vous suggère de jeter un coup d'œil à Jedit. , Il est disponible dans les référentiels et peut être installé en tapant dans votre console:
Lancez jedit, cliquez sur l'élément de menu de recherche, dans la liste de menu, cliquez sur l'élément de recherche dans le répertoire. La boîte de dialogue ci-dessous s'affichera:
Ceci est similaire à celui de Notepad ++ et fait la même chose, je crois que c'est ce que vous voulez.
la source
sed
.Regexxer est une autre option de l'interface graphique :
la source
remplace toute occurrence de oldtext par newtext dans tous les fichiers du dossier en cours. Cependant, vous devrez échapper à tous les caractères spéciaux Perl dans oldtext et newtext en utilisant la barre oblique inverse.
la source
Vérifiez auprès de Geany , il s’agit du remplacement parfait de NPP pour Linux. Vous pouvez faire exactement cela, plus vous pouvez utiliser regex.
la source
J'ai écrit un petit script pour cette chose. Si vous avez seulement besoin des bases et que vous n'êtes pas familiarisé avec sed, etc., consultez la page suivante : http://www.csrdu.org/nauman/2010/12/30/bash-script-to-find-and-replace-in -a-set-of-files /
Le script est le suivant:
la source
Vous pouvez utiliser ce script, copier du code et créer un fichier
find_and_replace_in_files.sh
.Je l'ai un peu modifié; s'il vous plaît dites-moi votre opinion.
la source
Searchmonkey est un autre programme .
la source
travaille pour moi sur fedora
la source
sed
instances! C'est donc beaucoup plus rapide en termes de temps de calcul. Le temps d’accès aux fichiers étant limité, je pense que le temps d’horloge n’est pas beaucoup plus rapide, mais que la charge du système est réduite. Notexargs
mettra beaucoup, comme des centaines, de noms de fichiers sur la ligne de commande d'une seulesed
commande - en remplissant la taille de la mémoire tampon disponible en fonction de la longueur des chemins.+
au lieu de\;
dansfind
, non?xargs
, mais vous avez raison; deman find
:-exec command {} +
...The command line is built in much the same way that xargs...
. Cela me fait penser aux lignes de commande degit filter-branch
...;)Une solution très simple: remplacez dans tous les
*.txt
fichiers du dossierstring_1
parstring_2
:la source
sed -i 's/string_1/string_2/g' $(grep -rEl 'string_1' ./)