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 "" (senza le virgolette).

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.

È stato utile?

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.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top