Ответ 1
sed "s/^[ \t]*//" -i youfile
Предупреждение: это перезапишет исходный файл.
У меня есть файл, который выглядит примерно так:
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
, может быть?)
sed "s/^[ \t]*//" -i youfile
Предупреждение: это перезапишет исходный файл.
Для этой конкретной проблемы будет работать что-то вроде этого:
$ sed 's/^ *//g' < input.txt > output.txt
В нем говорится заменить все пробелы в начале строки ничем. Если вы также хотите удалить вкладки, измените его на следующее:
$ sed 's/^[ \t]+//g' < input.txt > output.txt
Ведущие "s" перед/означает "заменить"./Являются разделителями для шаблонов. Данные между двумя первыми/являются совпадением шаблона, а данные между вторым и третьим /- это данные для его замены. В этом случае вы заменяете его ничем. "G" после последней косой черты означает сделать это "глобально", то есть: по всему файлу, а не только по найденному первому совпадению.
Наконец, вместо < input.txt > output.txt
вы можете использовать опцию -i
, которая означает редактирование файла "на месте". Значит, вам не нужно создавать второй файл, чтобы содержать результат. Если вы используете этот параметр, вы потеряете исходный файл.
вы можете использовать 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"
Этот код Perl редактирует исходный файл:
perl -i -ne 's/^\s+//;print' file
Следующий файл создает резервную копию перед редактированием исходного файла:
perl -i.bak -ne 's/^\s+//;print' file
Обратите внимание, что Perl сильно зависит от sed (и awk)
Здесь вы идете:
[email protected]:~$ sed 's/^[\t ]*//g' < file-in.txt
Или:
[email protected]:~$ sed 's/^[\t ]*//g' < file-in.txt > file-out.txt
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] * соответствует одному или нескольким пробелам, включая вкладку)
//: Заменить (удалить) весь сопоставленный шаблон
FWIW, если вы редактируете этот файл, вы можете выделить все строки и использовать кнопку un-tab.
Не уверен, что есть какое-то требование, чтобы это было сделано из командной строки. Если да, то: thumbs-up: к принятому ответу! =)