Was macht diese Linux-Shell-Skriptzeile?

Was macht diese Linux-Shell-Skriptzeile?

Ich versuche genau herauszufinden, was die folgende Shell-Skriptzeile macht:

grep --files-with-matches '>' . | sort | uniq | xargs perl -pi~ -e 's/9Kp/9K /' /home/user/DATAFILE.DAT

Ich bin ziemlich sicher, dass es versucht, eine globale Suche nach „9Kp“ durchzuführen und es in der angegebenen Datendatei durch „9K“ zu ersetzen. Mir ist jedoch nicht klar, was der Grep-Befehl vorher macht.

Antwort1

grep --files-with-matches '>' .

Suche >im aktuellen Verzeichnis ( .) und drucke nur die Dateinamen der passenden Dateien ( --files-with-matches).

Beachten Sie, dass grepnicht zurückkehrenirgendetwaswenn Sie ihm ein Verzeichnis ( .) geben, aber vergessen, den "rekursiven" Modus zu aktivieren. Der richtige Befehl wäre

grep --files-with-matches --recursive '>' .

oder einfach

grep -Rl '>' .

| sort
| uniq

Sortieren Sie die Ergebnisse und entfernen Sie Duplikate.

| xargs perl -pi~ -e 's/9Kp/9K /' /home/user/DATAFILE.DAT

Führen Sie den angegebenen Befehl ( perl ...) mit jedem Wort 1 von stdin aus, das als zusätzliche Argumente übergeben wird.

Alle Ergebnisdateien grepsowie die /home/user/DATAFILE.DATDatei selbst werden aktualisiert, indem der Text " 9Kp" durch " 9K " ersetzt wird. Die alten Dateien werden mit einer abschließenden Tilde gesichert.

1 Hinweis:Wort, nichtLinie. Das bedeutet, dass ein Dateiname mit Leerzeichen als mehrere Namen behandelt wird. xargs -d'\n'wäre besser, aber nicht perfekt.

verwandte Informationen