Ich habe eine Datei, die ungefähr so aussieht:
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
Ich möchte, dass es so aussieht (Einrückungen entfernen):
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
Wie kann das gemacht werden (vielleicht mit sed
?)
sed "s/^[ \t]*//" -i youfile
Achtung: Dadurch wird die Originaldatei überschrieben.
Für dieses spezielle Problem würde so etwas funktionieren:
$ sed 's/^ *//g' < input.txt > output.txt
Es heißt, alle Leerzeichen am Anfang einer Zeile durch nichts zu ersetzen. Wenn Sie auch Registerkarten entfernen möchten, ändern Sie es wie folgt:
$ sed 's/^[ \t]+//g' < input.txt > output.txt
Das führende "s" vor dem/bedeutet "Ersatz". Die/sind die Trennzeichen für die Muster. Die Daten zwischen den ersten beiden Werten sind das zu übereinstimmende Muster, und die Daten zwischen den zweiten und dritten sind die Daten, durch die sie ersetzt werden sollen. In diesem Fall ersetzen Sie es durch nichts. Das "g" nach dem letzten Schrägstrich bedeutet "global", dh über die gesamte Datei und nicht nur über die erste Übereinstimmung, die gefunden wird.
Anstelle von < input.txt > output.txt
können Sie schließlich die -i
-Option verwenden, um die Datei "in place" zu bearbeiten. Das heißt, Sie müssen keine zweite Datei erstellen, um Ihr Ergebnis zu enthalten. Wenn Sie diese Option verwenden, verlieren Sie Ihre Originaldatei.
sie können awk verwenden
$ awk '{$1=$1}1' file
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
sed
$ sed 's|^[[:blank:]]*||g' file
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
Shell/while-Schleife
while read -r line
do
echo $line
done <"file"
Dieser Perl-Code bearbeitet Ihre Originaldatei:
Perl -i -ne 's/^\s+//;print' file
Die nächste erstellt eine Sicherungskopie, bevor die Originaldatei bearbeitet wird:
Perl -i.bak -ne 's/^\s+//;print' file
Beachten Sie, dass sich Perl stark von sed (und awk) borgt.
FWIW, wenn Sie diese Datei editieren, können Sie wahrscheinlich alle Zeilen hervorheben und Ihre un-tab-Taste verwenden.
Nicht sicher, ob es von der Befehlszeile aus erforderlich ist, dies zu tun. Wenn ja, dann: Daumen hoch: zur akzeptierten Antwort! =)
sed -e s/^ [\ t] * // 'name_of_file_from_which_you_want_to_remove_space>' name _file_where_you_want_to_store_output '
Beispiel: - sed -e 's/^ [\ t] * //' file1.txt> output.txt
Hinweis:
s /: Ersetzen Sie den Befehl ~ Ersetzung für Muster (^ [\ t] *) in jeder adressierten Zeile
^ [\ t] *: Suchmuster (^ - Anfang der Zeile; [\ t] * entspricht einem oder mehreren Leerzeichen einschließlich Tabulator)
//: Alle übereinstimmenden Muster ersetzen (löschen)
Bitte schön:
[email protected]:~$ sed 's/^[\t ]*//g' < file-in.txt
Oder:
[email protected]:~$ sed 's/^[\t ]*//g' < file-in.txt > file-out.txt