回答:
# possibility 1:
echo "line 1" >> greetings.txt
echo "line 2" >> greetings.txt
# possibility 2:
echo "line 1
line 2" >> greetings.txt
# possibility 3:
cat <<EOT >> greetings.txt
line 1
line 2
EOT
ファイルに書き込むためにsudo(他のユーザー特権)が必要な場合、これを使用します。
# possibility 1:
echo "line 1" | sudo tee -a greetings.txt > /dev/null
# possibility 3:
sudo tee -a greetings.txt > /dev/null <<EOT
line 1
line 2
EOT
( echo "line 1" ; echo "line 2" ) >>greetings.txt
です。
{ echo "line 1" ; echo "line 2"; } >>greetings.txt
cat <<EOT
、EOT
単なるランダムな文字列です。かもしれませcat <<FOO
ん。
別のアプローチは tee
tee -a ~/.ssh/config << END
Host localhost
ForwardAgent yes
END
tee
のmanページからのいくつかの選択行:
teeユーティリティーは、標準入力を標準出力にコピーし、ゼロ個以上のファイルにコピーを作成します。
-a-出力を上書きするのではなく、ファイルに追加します。
SEDは次のようにファイルの末尾に行を追加できます。ファイルの
sed -i '$ a text to be inserted' fileName.file
$
末尾を選択a
し、追加するように指示し、その後に挿入されるテキストが続きます。それからもちろんファイル名。
ソース:http :
//www.yourownlinux.com/2015/04/sed-command-in-linux-append-and-insert-lines-to-file.html
========== EDIT == ==========
このアプローチには、他のソリューションよりも利点がありますか?
はい、このアプローチには、次のような検索で返されるファイルに追加するという追加の利点があります。
find . -name "*.html" -exec sed -i '$ a </html>' {} \;
上記の例を使用して、いくつかのディレクトリ内のすべてのhtmlページにない終了htmlタグを挿入しました。
===================================
sed
。BSD sed
は次のエラーで終了します:command a expects \ followed by text
。したがって、スクリプト化されたソリューションにこれを使用しないでください。壊れやすい。BSD構文を必要に応じて(あるいは、それを適切に行うPOSIX互換性があり、GNU上で動作しますsed
同様。
find
、次のように使用できますfind . -name "*.txt" -exec sh -c 'printf "%s\n\t%s\n" "Host localhost" "ForwardAgent yes" >> "$1"' sh {} ";"
。
>
、>>
)を実行しないため、実行などの問題の影響を受けないため、非常に優れたソリューションsudo echo 'something' > /file
です。私にとっては、lxdコンテナ内のファイルに次のような行を追加することができますlxc exec c sed -- '$ a newline' /myfile
。
echo "a new line" >> foo.file
ファイルは改行で終わりではありませんが、ときに新しい行を作成しませんsed -i '$ a a new line' foo.file
行いますので、sed
特にあなたが常にファイルに新しい行を追加したい優れています。
sudoを使用できるので、sedを使用しました。例えば:
sudo sed -i '$ a text to be inserted' fileName.file
代わりは非常にugいです:
sudo bash -c "echo a text to be inserted >> fileName.file"
sshを使用した場合はさらに見苦しくなります。
sed -i
は引数として拡張子を取りませんか?あなたの例には、誤ったパラメーターが含まれている可能性があります。
cat >> out.txt
PerlまたはPythonでエミュレートして同じ効果を得ることができます。Perl:
perl -e 'open(fh,">>","./out.txt");while(<>){printf(fh "%s",$_)};close(fh);'
そしてPython:
python -c 'import sys;f=open(sys.argv[1],"a");l=[i for i in sys.stdin];f.write("".join(l))' out.txt
Pythonでは、Ctrl+をD2回押す必要があることに注意してください。詳細については、stackoverflowの関連質問を参照してください。
ファイルに複数の行を追加する例を次に示します。
{
echo ' directory "/var/cache/bind";'
echo ' listen-on { 127.0.0.1; };'
echo ' listen-on-v6 { none; };'
echo ' version "";'
echo ' auth-nxdomain no;'
echo ' forward only;'
echo ' forwarders { 8.8.8.8; 8.8.4.4; };'
echo ' dnssec-enable no;'
echo ' dnssec-validation no;'
} >> your_file.txt
主な答えに加えて、ファイルにスーパーユーザー権限が必要な場合、sudo
前に追加するだけでecho
は機能しません。
これは、シェルがコマンドを中断し、echo
ルートとして実行された>>
が、通常の権限で実行されたためです。
これはスーパーユーザーに対して機能します。
sudo su -c "echo 'Line 3' >> greetings.txt"
su
ここは必要ありません(sudo su
良くありません)。しかし、あなたはシェルのリダイレクトを管理する何かが必要であるという点で正しいです。おそらくsudo sh -c "echo stuff >> file.txt"
。ネットの節約はありませんが、より良い方法です。