comando sed unico per sostituzioni multiple?
-
19-09-2019 - |
Domanda
sed per sostituire testo nei file. Voglio dare sed un file che contiene tutte le stringhe da cercare e sostituiti in un dato file.
Si va oltre i file .he cpp. In ogni file che cerca i nomi dei file che sono inclusi in esso. Se trovato, si sostituisce ad esempio "a.h" con "
Lo script è questo:
For /F %%y in (all.txt) do
for /F %%x in (allFilesWithH.txt) do
sed -i s/\"%%x\"/"\<"%%x"\>"/ %%y
- ALL.TXT - Elenco dei file per fare la sostituzione in loro
- allFilesWithH.txt - Tutto il includere i nomi da cercare
Non voglio correre sed più volte (come il numero di file nomi in input.txt.) Ma voglio eseguire un singolo comando sed e passarlo input.txt come input.
Come posso fare?
P.S corro sed da VxWorks Sviluppo shell, in modo da non avere tutti i comandi che la versione per Linux.
Soluzione
sed
sé non ha la capacità di leggere i nomi dei file da un file. Non ho dimestichezza con VxWorks guscio, e immagino che questo è qualcosa a che fare con la mancanza di risposte ... Così qui ci sono alcune cose che avrebbero funzionato in bash - forse VxWorks sosterrà una di queste cose
sed -i 's/.../...' `cat all.txt`
sed -i 's/.../...' $(cat all.txt)
cat all.txt | xargs sed -i 's/.../...'
E in realtà, non è un grosso problema per invocare sed
più volte se si ottiene il lavoro fatto:
cat all.txt | while read file; do sed -i 's/.../.../' $file; done
for file in $(cat all.txt); do # or `cat all.txt`
sed -i 's/.../.../' $file
done
Altri suggerimenti
È possibile eliminare una delle anse esigenze sed
solo per essere chiamato una volta per ogni file. Uso
l'opzione -f
per specificare più di una sostituzione:
For /F %%y in (all.txt) do
sed -i -f allFilesWithHAsSedScript.sed %%y
allFilesWithHAsSedScript.sed
deriva dal allFilesWithH.txt
e dovrebbe contenere:
s/\"file1\"/"\<"file1"\>"/
s/\"file2\"/"\<"file2"\>"/
s/\"file3\"/"\<"file3"\>"/
s/\"file4\"/"\<"file4"\>"/
(Nell'articolo discussioni comuni: Sed per esempi , Parte 3 ci sono molti esempi di script sed con spiegazioni.)
Non confondetevi (gioco di parole).
Quello che mi piacerebbe fare è cambiare allFilesWithH.txt in un comando sed usando sed.
(quando è costretto a usare sed. Avevo in realtà uso Perl, invece, può anche fare la ricerca per i file * .h.)