web-dev-qa-db-ja.com

シェルスクリプトでファイルに行を追加するにはどうすればよいですか?

既存のCSVファイルにヘッダーの行を追加し、その場で編集したい。これどうやってするの?

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

で終わりたい

column1, column2, column3
one,     two,     three

最初のCSV出力を変更するのは手に負えません。

任意の標準コマンドで実行できます。重要なことは、ファイルがその場で編集され、ファイルの先頭に行が挿入されることです。

41
user4812

これにより、ファイルの先頭にカスタムテキストが追加されます。

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

元の質問に答えるために、sedを使用して次のようにします。

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

「1i」コマンドは、sedに1行目にテキストを挿入するよう指示します。

-iオプションを使用すると、ファイルは「インプレース」で編集され、オプションの引数を使用してバックアップファイルを作成することもできます。たとえば、

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

「testfile.csv〜」に元のファイルを保持します。

69
Matthew Crumley

これはsedを使用しませんが、>>を使用するとファイルに追加されます。例えば:

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

Edit:ファイルの先頭に追加するには、次のようにします:

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

これは簡単な Google検索 で見つけました。

11
Scottie T

私の知る限り、あなたはcolumn1, column2, column3既存のone, two, three

edはファイルではなく標準出力に書き込むため、sedの代わりにsedを使用します。

コマンド:

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

作業を行う必要があります。

Perl -iも一見の価値があります。

8
mouviciel

sedは行ベースなので、なぜsedでこれをしたいのかわかりません。パラダイムは、一度に1行ずつ処理することです(CSVでフィールドの数をプログラムで見つけて、awkでヘッダー行を生成することもできます)

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

3
Steve B.

2つのコマンドでファイルの先頭に特定の行を追加します。

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

Perl -iを使用して、1行目の先頭を挿入したいものに置き換えます(.bkには元のファイルがバックアップされるという効果があります)。

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