jak usunąć początkowe spacje z każdej linii pliku?

Mam plik, który wygląda mniej więcej tak:

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

Chcę, aby wyglądało to tak (usuń wcięcia):

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

Jak można to zrobić (używając sed może?)

Author: Bryan Oakley, 2010-02-22

7 answers

sed "s/^[ \t]*//" -i youfile

Ostrzeżenie: spowoduje to zastąpienie oryginalnego pliku.

 82
Author: shuvalov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-15 20:13:35

Dla tego konkretnego problemu, coś takiego działa:

$ sed 's/^ *//g' < input.txt > output.txt

Mówi, aby zastąpić wszystkie spacje na początku linii niczym. Jeśli chcesz również usunąć karty, zmień je na to:

$ sed 's/^[ \t]+//g' < input.txt > output.txt

Wiodące " s " przed / oznacza "substytut". Znaki / są ogranicznikami wzorców. Dane pomiędzy dwoma pierwszymi / są wzorcem do dopasowania, a dane między drugim i trzecim / są danymi do zastąpienia. W tym przypadku zastępujesz go niczym. "G" po ostatnim ukośniku oznacza robić to "globalnie", tj.: nad całym plikiem, a nie tylko na pierwszym znalezionym dopasowaniu.

Wreszcie, zamiast < input.txt > output.txt możesz użyć opcji -i, która oznacza edycję pliku "na miejscu". Oznacza to, że nie trzeba tworzyć drugiego pliku, aby zawierać wynik. Jeśli użyjesz tej opcji, utracisz oryginalny plik.

 22
Author: Bryan Oakley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-22 12:01:50

Możesz użyć awk

$ 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 ' s while / read loop

while read -r line
do
    echo $line
done <"file"
 10
Author: ghostdog74,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-22 13:01:47

Ten kod Perla edytuje twój oryginalny plik:

perl -i -ne 's/^\s+//;print' file

Następny wykonuje kopię zapasową przed edycją oryginalnego pliku:

perl -i.bak -ne 's/^\s+//;print' file

Zauważ, że Perl mocno pożycza od sed (i awk)

 4
Author: Chris Koknat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-22 19:10:59

Proszę bardzo:

user@host:~$ sed 's/^[\t ]*//g' < file-in.txt

Lub:

user@host:~$ sed 's/^[\t ]*//g' < file-in.txt > file-out.txt
 0
Author: Joao da Silva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-22 11:47:32

Sed-e ' S / ^ [\T]*//' name_of_file_from_which_you_want_to_remove_space > 'name _file_where_you_want_to_store_output'

E. g: - sed-e' S/^ [\T]*/ / ' file1.txt > wyjście.txt

Uwaga:

S/: Zastąp polecenie ~ Zastąp dla wzorca (^[\t]*) na każdej adresowanej linii

^ [\t]*: Szukaj wzorca (^- początek linii; [\t]* dopasuj jedno lub więcej spacji, w tym tabulator)

//: Replace (delete) all matched wzór

 0
Author: zahid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-27 08:40:11

FWIW, jeśli edytujesz ten plik, prawdopodobnie możesz podświetlić wszystkie linie i użyć przycisku un-tab.

  • w vim, użyj shift-v, aby podświetlić linie, a następnie naciśnij
  • Jeśli jesteś na Macu, możesz użyć Atom, Sublime itp., następnie podświetl myszką, a następnie naciśnij shift-tab

Nie jestem pewien, czy istnieje jakiś wymóg, aby to zrobić z linii poleceń. Jeśli tak ,to: kciuki do góry: do zaakceptowanej odpowiedzi! =)

 0
Author: Ben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-02 18:50:10