Ответ 1
Это добавляет пользовательский текст в начале вашего файла:
echo 'your_custom_escaped_content' > temp_file.csv
cat testfile.csv >> temp_file.csv
mv temp_file.csv testfile.csv
Я хочу добавить строку заголовков в существующий файл CSV, редактируя его. Как я могу это сделать?
echo 'one, two, three' > testfile.csv
и я хочу закончить с
column1, column2, column3
one, two, three
Изменение исходного CSV-вывода из моих рук.
Любая стандартная команда будет выполнять. Важно то, что файл редактируется на месте, и строка вставлена в начало файла.
Это добавляет пользовательский текст в начале вашего файла:
echo 'your_custom_escaped_content' > temp_file.csv
cat testfile.csv >> temp_file.csv
mv temp_file.csv testfile.csv
Чтобы ответить на ваш оригинальный вопрос, вот как вы это делаете с sed:
sed -i '1icolumn1, column2, column3' testfile.csv
Команда "1i" сообщает sed перейти к строке 1 и вставить туда текст.
Параметр -i заставляет файл редактировать "на месте" и также может принимать необязательный аргумент для создания файла резервной копии, например
sed -i~ '1icolumn1, column2, column3' testfile.csv
сохранит исходный файл в файле "testfile.csv ~".
Насколько я понимаю, вы хотите добавить column1, column2, column3
к существующему one, two, three
.
Я использовал бы ed
вместо sed
, так как sed
записывать на стандартный вывод, а не в файл.
Команда:
printf '0a\ncolumn1, column2, column3\n.\nw\n' | ed testfile.csv
должен выполнить работу.
perl -i
стоит взглянуть также.
Это не использует sed, но использование → будет добавлено в файл. Например:
echo 'one, two, three' >> testfile.csv
Изменить. Чтобы добавить файл в файл, попробуйте что-то вроде этого:
echo "text"|cat - yourfile > /tmp/out && mv /tmp/out yourfile
Я нашел это через быстрый поиск Google.
sed основан на линии, поэтому я не уверен, почему вы хотите сделать это с помощью sed. Парадигма больше обрабатывает по одной строке за раз (вы также можете программно найти # полей в CSV и сгенерировать строку заголовка с awk) Почему бы просто не
echo "c1, c2, ... " >> file
cat testfile.csv >> file
?
Использовать perl -i с помощью команды, которая заменяет начало строки 1 тем, что вы хотите вставить (файл .bk будет иметь эффект резервного копирования исходного файла):
perl -i.bk -pe 's/^/column1, column2, column3\n/ if($.==1)' testfile.csv
Добавьте заданную строку в начале файла в две команды:
cat <(echo "blablabla") input_file.txt > tmp_file.txt
mv tmp_file.txt input_file.txt