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

Как добавить строку в файл в оболочке script?

Я хочу добавить строку заголовков в существующий файл CSV, редактируя его. Как я могу это сделать?

echo 'one, two, three' > testfile.csv

и я хочу закончить с

column1, column2, column3
one,     two,     three

Изменение исходного CSV-вывода из моих рук.

Любая стандартная команда будет выполнять. Важно то, что файл редактируется на месте, и строка вставлена ​​в начало файла.

4b9b3361

Ответ 1

Это добавляет пользовательский текст в начале вашего файла:

echo 'your_custom_escaped_content' > temp_file.csv
cat testfile.csv >> temp_file.csv
mv temp_file.csv testfile.csv

Ответ 2

Чтобы ответить на ваш оригинальный вопрос, вот как вы это делаете с sed:

sed -i '1icolumn1, column2, column3' testfile.csv

Команда "1i" сообщает sed перейти к строке 1 и вставить туда текст.

Параметр -i заставляет файл редактировать "на месте" и также может принимать необязательный аргумент для создания файла резервной копии, например

sed -i~ '1icolumn1, column2, column3' testfile.csv

сохранит исходный файл в файле "testfile.csv ~".

Ответ 3

Насколько я понимаю, вы хотите добавить column1, column2, column3 к существующему one, two, three.

Я использовал бы ed вместо sed, так как sed записывать на стандартный вывод, а не в файл.

Команда:

printf '0a\ncolumn1, column2, column3\n.\nw\n' | ed testfile.csv

должен выполнить работу.

perl -i стоит взглянуть также.

Ответ 4

Это не использует sed, но использование → будет добавлено в файл. Например:

echo 'one, two, three' >> testfile.csv

Изменить. Чтобы добавить файл в файл, попробуйте что-то вроде этого:

echo "text"|cat - yourfile > /tmp/out && mv /tmp/out yourfile

Я нашел это через быстрый поиск Google.

Ответ 5

sed основан на линии, поэтому я не уверен, почему вы хотите сделать это с помощью sed. Парадигма больше обрабатывает по одной строке за раз (вы также можете программно найти # полей в CSV и сгенерировать строку заголовка с awk) Почему бы просто не

echo "c1, c2, ... " >> file
cat testfile.csv >> file

?

Ответ 6

Использовать perl -i с помощью команды, которая заменяет начало строки 1 тем, что вы хотите вставить (файл .bk будет иметь эффект резервного копирования исходного файла):

perl -i.bk -pe 's/^/column1, column2, column3\n/ if($.==1)' testfile.csv  

Ответ 7

Добавьте заданную строку в начале файла в две команды:

cat <(echo "blablabla") input_file.txt > tmp_file.txt
mv tmp_file.txt input_file.txt