ファイルが存在しない場合はファイルを検索するbashスクリプトを作成してから作成し、次のように追加します。
Host localhost
ForwardAgent yes
そう "line then new line 'tab' then text"
デリケートなフォーマットだと思います。私はあなたがこれを行うことができることを知っています:
cat temp.txt >> data.txt
しかし、その2つの行から奇妙なようです。これをこの形式で追加する方法はありますか?
echo "hello" >> greetings.txt
# 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
printf '%s\n %s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt
または、(質問内の4つのスペースではなく)必要なリテラルタブの場合:
printf '%s\n\t%s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt
echo
を使用しても同じ効果を得ることができますが、printf
は定数であるのに対して、実装によってどのように変化するかは正確です。
echo -e "Hello \nWorld \n" >> greetings.txt
別のアプローチはtee
を使用することです
tee -a ~/.ssh/config << END
Host localhost
ForwardAgent yes
END
tee
のmanページのいくつかの選択行:
Teeユーティリティは、標準入力を標準出力にコピーし、0個以上のファイルにコピーを作成します。
-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
==========編集============
このアプローチには、他のソリューションよりもメリットがありますか?
はい、このアプローチには、次のような検索で返されるファイルに追加するという追加の利点があります:find . -name "*.html" -exec sed -i '$ a </html>' {} \;
上記の例を使用して、いくつかのディレクトリ内のすべてのhtmlページで欠落していた終了htmlタグを挿入しました。
===================================
ファイルに複数の行を追加する例を次に示します。
{
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を使用できるので、sedを使用しました。例えば:
Sudo sed -i '$ a text to be inserted' fileName.file
代替案は非常に醜いです:
Sudo bash -c "echo a text to be inserted >> fileName.file"
sshを使用すると、さらに醜くなります。
同じ効果を得るために、PerlまたはPythonのいずれかを使用してcat >> out.txt
をエミュレートできます。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+D 二回。詳細は stackoverflowの関連質問 を参照してください。
別のライナーは次のとおりです。
echo "Greetings 1" >> greetings.txt && echo "Greetings 2" >> greetings.txt
-e
オプションは、より多くの制御を可能にするため、考えました:
echo -e "Greeting 1\nGreetings 2\n" >> greetings.txt
メインの回答に加えて、ファイルにスーパーユーザー権限が必要な場合は、Sudo
の前にecho
を追加するだけでは機能しません。
これは、シェルがコマンドを中断し、echo
がrootとして実行されたが、>>
は通常の権限で実行されました。
これはスーパーユーザーで機能します:Sudo su -c "echo 'Line 3' >> greetings.txt"