web-dev-qa-db-ja.com

コマンドラインから複数行のファイルを作成するにはどうすればよいですか?

次の内容をファイルに入力するにはどうすればよいですか。

Hi
abcd

echo "Hi\nabcd" >> ab.txtを使用してみましたが、ファイルにはそのまま書き込まれています(改行の代わりに\nが含まれています)

10
Novice User

エスケープシーケンスを尊重するには、echoに通知する必要があります。

echo -e "Hi\nabcd" >> ab.txt

echo の動作はシェルによって異なります¹; printf の動作はより標準的です。

printf "Hi\nabcd" >> ab.txt

¹ "両方の-n(as)でない限り、すべてのPOSIXシステムでechoを移植して使用することはできません。最初の引数)とエスケープシーケンスは省略されます。」

12
ephemient

cat > fileと入力し、入力し終えたらCtrl-Dを押します。

6
psusi

引用付きのゲームをプレイすることもできます:

 % echo 'Hi
> abcd' >> ab.txt

「Hi」の後に「Enter」を押すと、bashに入力できます。 Bashは、コマンドの継続プロンプトとして「>」を使用しています。どういうわけか、バックスラッシュで個々のリターンを逃れることができませんでした。

5
Bruce Ediger

bash Shell機能(Here Document )を使用することをお勧めします。あなたが説明することを達成するための最もエレガントなフォームのようです。最も重要なのは、複数行のコンテンツが、出力ファイルにあるのとまったく同じように見えることです(判読不能、長い、\nで区切られた文字列)。

cat > ab.txt <<EOL
Hi
abcd
EOL

ここのEOLは、シェルがこちらのドキュメントの終わりを見つけるために何を探す必要があるかを示すマーカーです。 こちらのドキュメントの内容自体と偶然に競合しないものを選択できる単語を任意に選択できます。シェル${VARIABLES}置換されます。それがどういうわけか望まないなら、あなたはいつでも引用符(')それを防ぐために。

私は個人的にこれをinitスクリプトで頻繁に使用して、環境の設定時に次のような小さな構成ファイルを作成します。

cat > ~/.screenrc <<END_OF_HEREDOC_MARKER
defscrollback ${MAX_LINES}
END_OF_HEREDOC_MARKER
4
msciwoj
cp /dev/tty file

enterキーを押します。次に入力を開始します。好きなだけ入力を続けます。すべての入力を完了したら、tty EOF文字列を入力します。これは通常CTRL+Dで送信されます。今度はもう一度押すと、完了です。

0
mikeserv