テキストファイルの先頭に特定の形式のコンテンツを追加する必要があります。調べたBashで複数のテキストファイルの先頭と末尾にテキストを追加する方法しかし、私の状況にどのように適応するのかわかりません。
パスワード
printf 'Anything\tyou\twant\tto\tadd' 0a . x | ex printf.csv
期待される出力
$ head -n 1 printf.csv;
Anything you want to add
注:私はprintf
解決策を好みます。
答え1
の場合はex
次のようになります。
printf '%b\n' 0a 'Anything\tyou\twant\tto\tadd' . x | ex -s printf.csv
または:
printf '0a\nAnything\tyou\twant\tto\tadd\n.\nx\n' | ex -s printf.csv
パラメータによって認識されるエスケープシーケンスは、フォーマットパラメータ%b
のエスケープシーケンスとは異なります。前者は標準でありecho
、後者は標準Cに似ています(多くのprintf
実装ではこれを拡張しますが)。それとは違いはありませんが、(少なくとも移植性が必要な場合は)パラメータに\t
それを作成する必要があります。\11
\011
%b
別のオプションは、拡張に%s
ksh93スタイルの引用符を使用することです。$'...'
\t
printf '%s\n' 0a $'Anything\tyou\twant\tto\tadd' . x | ex -s printf.csv
サポートされている場合(少なくともksh93、zsh、bash、FreeBSD sh、busybox ash)、これらの引用$'...'
は通常、型パラメータのように標準Cエスケープ(拡張を含む)をサポートしますprintf
(%b
またはecho
答え2
printf
オプションではなく、最初の引数として型文字列を渡します。最初のパラメータがなどの書式指定子を使用しない場合、残りのパラメータ%s
は事実上役に立ちません。したがって、エスケープ文字が解釈される最初の引数を使用するには、残りのテキストも\t
ここに収まる必要があります。この答えは次のように言います。
0a
「0行の後にテキストを追加する」(つまり、1行の前に)を意味します。次の行は、0行目の後に「追加」されるリテラルテキストです。.
行自体のピリオド()は、追加するテキストを終了します。0a
来なければならない今後追加するテキストです。
したがって、次のようになります。
printf '0a\nAnything\tyou\twant\tto\tadd\n.\nx\n' | ex printf.csv
例:
% printf '0a\nAnything\tyou\twant\tto\tadd\n.\nx\n' | ex printf.csv
"printf.csv" [New file]
"printf.csv" [New file] 1 line, 25 characters
% cat printf.csv
Anything you want to add
答え3
cat
コマンドを使用してください。 conCATファイルで使用するように設計されています。
test.txt
次の内容を含むファイルがあるとします。
Test file
Here it is
次のように、および
printf
で始まるテキストを追加できます。cat
printf "Some fancy text\n" | cat - test.txt
Some fancy text
Test file
Here it is
出力を別のファイルにリダイレクトし、最後に古いファイルの場所に保存できます(この場合)。
printf "Some fancy text\n" | cat - test.txt > /tmp/insertTestFile && mv /tmp/insertTestFile test.txt
これは単なる概念証明である。実際のシナリオでは、次の制限を考慮する必要があります。
- 固定名のディレクトリにファイルを作成する
/tmp
ことはお勧めできません。tempfile
必要に応じて、コマンドを使用してファイルを生成し、その名前を変数に保存することを検討してください。 - 他のファイルシステムで使用すると、
mv
ファイルがコピーされます。 - 上記のソリューションは新しいファイルを作成し、その権限とaclで古いファイルを削除します。
私の目標は、初心者が理解しやすい簡単な解決策を示すことです。この回答にコメントして誤解を招くことを指摘してくれた皆さんに感謝します。
PS。私の好きな方法は次のとおりです。sed -i '1s/^/Added text\n/' file.txt