echo は既存の行に追加され、その行に続きます。

echo は既存の行に追加され、その行に続きます。

:/etc/simmmerin/bin/echoコマンドを使用してファイルのfilename既存の行に文字列を追加する方法。操作できません。

echo ":/etc/simmerin/bin/" >> filename

私が望む行を続けるのではなく、ファイルの一番下に追加されます。私はecho各ファイルやそのようなものを使用する代わりに使用したいと思いますvim

答え1

ファイルの末尾にはすでに改行文字があり、最後の行を終了します。追加内容は別の行に表示されます。最後の改行文字を上書きする必要がありますが、リダイレクトだけではそうすることは>>できません。おそらく使用する最も簡単な方法は次のとおりですsed

$ seq 1 4 | sed -e '$s,$,stuff/to/append,'
1
2
3
4stuff/to/append

sedファイルを適切に変更するには、次のようにします。

sed -i -e '$s,$,stuff/to/append,' filename

(ドル記号には2つの意味があります。最初は次のコマンドが$実行される行を制御するアドレスです。ここでは最後の行です。2番目は行の終わりを$表す正規表現です。)


最後の行ではなく行に追加するには、最初の行を行$番号またはパターン一致に置き換えます。これにより、以下を含むすべての行に文字列が追加されますfoo

sed -i -e '/foo/ s,$,stuff/to/append,' filename

ここでは、sコマンド区切り文字としてカンマを使用しています。スラッシュがより一般的ですが、追加されるテキストにはスラッシュが含まれています。このsコマンドを使用すると、(ほぼ)すべての文字を使用できます。

正しい行を見つけるために使用されるパターンにスラッシュがある場合は、同様の\,foo,アドレスを使用できます。つまり、バックスラッシュで始まり、便利な区切り文字を使用できます。

答え2

既存のファイルを変更するには、sedコマンドを使用できます。

追加する文字列とそれを挿入したい行番号があるとします。

mystring=":/etc/simmerin/bin/"
lineno=10

文字列の挿入スタートライン:

sed "${lineno}s,^,${mystring}," file

文字列の挿入終わりライン:

sed "${lineno}s,\$,${mystring}," file

文字列の挿入今後銀行:

sed "${lineno}s,^,${mystring}\n," file

文字列の挿入後ろに銀行:

sed "${lineno}s,\$,\n${mystring}," file

答え3

newlineすでにファイルの末尾にあります。改行サイズは1バイトです。このtruncateコマンドを使用すると、ファイルを1バイト縮小してからファイルの末尾に追加できます。

truncate -s -1  filename && echo ":/etc/simmerin/bin/" >> filename

答え4

echoの代わりにprintfを使用すると、デフォルトでは「\ n」は追加されません。

printfはbashコマンドなので、シェルがそれをサポートしていることを確認してください。

関連情報