Подтвердить что ты не робот

Как удалить ведущие пробелы из каждой строки в файле?

У меня есть файл, который выглядит примерно так:

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

Я хочу, чтобы это выглядело (удалите отступы):

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, может быть?)

4b9b3361

Ответ 1

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

Предупреждение: это перезапишет исходный файл.

Ответ 2

Для этой конкретной проблемы будет работать что-то вроде этого:

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

В нем говорится заменить все пробелы в начале строки ничем. Если вы также хотите удалить вкладки, измените его на следующее:

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

Ведущие "s" перед/означает "заменить"./Являются разделителями для шаблонов. Данные между двумя первыми/являются совпадением шаблона, а данные между вторым и третьим /- это данные для его замены. В этом случае вы заменяете его ничем. "G" после последней косой черты означает сделать это "глобально", то есть: по всему файлу, а не только по найденному первому совпадению.

Наконец, вместо < input.txt > output.txt вы можете использовать опцию -i, которая означает редактирование файла "на месте". Значит, вам не нужно создавать второй файл, чтобы содержать результат. Если вы используете этот параметр, вы потеряете исходный файл.

Ответ 3

вы можете использовать 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 '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++)

оболочка while/read loop

while read -r line
do
    echo $line
done <"file"

Ответ 4

Этот код Perl редактирует исходный файл:

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

Следующий файл создает резервную копию перед редактированием исходного файла:

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

Обратите внимание, что Perl сильно зависит от sed (и awk)

Ответ 6

sed -e 's/^ [\ t] *//' name_of_file_from_which_you_want_to_remove_space > 'name _file_where_you_want_to_store_output'

например: - sed -e 's/^ [\ t] *//' file1.txt > output.txt

Примечание:

s/: Заменить команду ~ заменить шаблон (^ [\ t] *) на каждой адресной строке

^ [\ t] *: шаблон поиска (^ - начало строки; [\ t] * соответствует одному или нескольким пробелам, включая вкладку)

//: Заменить (удалить) весь сопоставленный шаблон

Ответ 7

FWIW, если вы редактируете этот файл, вы можете выделить все строки и использовать кнопку un-tab.

  • В vim используйте shift-v, чтобы выделить строки, затем нажмите < <
  • Если вы на Mac, тогда вы можете использовать Atom, Sublime и т.д., затем выделите мышью, а затем нажмите shift-tab

Не уверен, что есть какое-то требование, чтобы это было сделано из командной строки. Если да, то: thumbs-up: к принятому ответу! =)