Как добавить строку в файл в сценарии оболочки? - PullRequest
40 голосов
/ 28 января 2009

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

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

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

column1, column2, column3
one,     two,     three

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

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

Ответы [ 7 ]

68 голосов
/ 28 января 2009

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

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

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

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

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

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

33 голосов
/ 28 января 2009

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

echo 'your_custom_escaped_content' > temp_file.csv
cat testfile.csv >> temp_file.csv
mv temp_file.csv testfile.csv
10 голосов
/ 28 января 2009

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

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

Редактировать : Чтобы добавить к файлу, попробуйте что-то вроде этого:

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

Я нашел это с помощью быстрого поиска в Google .

8 голосов
/ 28 января 2009

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

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

Команда:

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

должен сделать работу.

perl -i тоже стоит посмотреть.

3 голосов
/ 28 января 2009

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

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

1 голос
/ 08 ноября 2011

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

cat <(echo "blablabla") input_file.txt > tmp_file.txt
mv tmp_file.txt input_file.txt
1 голос
/ 28 января 2009

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

perl -i.bk -pe 's/^/column1, column2, column3\n/ if($.==1)' testfile.csv  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...