Frage

Ich benutze sed Text in Dateien zu ersetzen. Ich möchte eine Datei sed geben, die in einer bestimmten Datei gesucht und ersetzt alle Fäden enthält werden.

Es geht über .h und CPP-Dateien. In jeder Datei sucht es nach Dateinamen, die in ihm enthalten sind. Wenn sie gefunden wird, ersetzt es zum Beispiel „A. h“ mit „“ (ohne Anführungszeichen).

Das Skript ist dies:

For /F %%y in (all.txt) do 
   for /F %%x in (allFilesWithH.txt) do
       sed -i s/\"%%x\"/"\<"%%x"\>"/ %%y
  • all.txt - Liste der Dateien in ihnen um die Substitution zu tun
  • allFilesWithH.txt - Alle sind Namen durchsucht werden

Ich will nicht, sed mehrmals (wie die Anzahl der Dateinamen in input.txt.) Laufen, aber ich mag einen einzigen sed Befehl auszuführen und es input.txt als Eingabe übergeben.

Wie kann ich es tun?

P. S I von VxWorks Entwicklungs Shell sed laufen, so dass er nicht über alle die Befehle, dass die Linux-Version der Fall ist.

War es hilfreich?

Lösung

sed selbst hat keine Möglichkeit Dateinamen aus einer Datei zu lesen. Ich bin nicht vertraut mit den VxWorks-Shell, und ich denke, das ist etwas, mit dem Mangel an Antworten zu tun ... Also hier sind einige Dinge, die in der Bash funktionieren würde - vielleicht wird VxWorks eines dieser Dinge unterstützen

.
sed -i 's/.../...' `cat all.txt`

sed -i 's/.../...' $(cat all.txt)

cat all.txt | xargs sed -i 's/.../...'

Und wirklich, es ist keine große Sache zu invoke sed mehrmals, wenn es bekommt den Job getan:

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

Andere Tipps

Sie können eine der Schleifen beseitigen, so sed muss nur einmal pro Datei aufgerufen werden. Verwenden die -f Option mehr als eine Substitution zu spezifizieren:

For /F %%y in (all.txt) do 
    sed -i -f allFilesWithHAsSedScript.sed %%y

allFilesWithHAsSedScript.sed ergibt sich aus allFilesWithH.txt und würde enthalten:

s/\"file1\"/"\<"file1"\>"/
s/\"file2\"/"\<"file2"\>"/
s/\"file3\"/"\<"file3"\>"/
s/\"file4\"/"\<"file4"\>"/

(Im Artikel Common Threads: Sed mit gutem Beispiel Teil 3 gibt es viele Beispiele von sed-Skripten mit Erklärungen.)

Nicht verwirren lassen (Wortspiel beabsichtigt).

Was ich tun würde, ist die Veränderung allFilesWithH.txt in einen sed Befehl sed verwendet wird.

(Wenn gezwungen verwenden sed. Ich eigentlich Perl stattdessen verwenden würde, kann es auch für * .h Dateien die Suche.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top