既存のファイルの先頭にテキストを挿入したい。どうすればこれを達成できますか。私が試したechoとteeが、成功しませんでした。
sources.listターミナルからファイルの先頭にレポ行を挿入しようとしていました。
注意
別の回答の方法がすでにわかっているため、1行の迅速な解決策が必要です。
既存のファイルの先頭にテキストを挿入したい。どうすればこれを達成できますか。私が試したechoとteeが、成功しませんでした。
sources.listターミナルからファイルの先頭にレポ行を挿入しようとしていました。
別の回答の方法がすでにわかっているため、1行の迅速な解決策が必要です。
回答:
実際には非常に簡単sedです:
sed -i -e '1iHere is my new top line\' filename
1iファイルの1行目に続くテキストを挿入するようにsedに指示します。\既存の行1が行2に移動するように、最後の改行を忘れないでください。
sは、iの代わりにuseを挿入する代わりに1i。
                    echo "Text Here" >> Filename
                    一般に、スクリプトを使用して所定の場所で編集するのは難しいですが、使用echoしcatてからmv
echo "fred" > fred.txt
cat fred.txt t.txt >new.t.txt
# now the file new.t.txt has a new line "fred" at the top of it
cat new.t.txt
# can now do the rename/move
mv new.t.txt t.txtただし、sources.listで遊んでいる場合は、これを失いたくないので、エラーなどを検出するための検証と防弾を追加する必要があります。しかし、それは別の質問です:-)
./prepend.sh "myString" ./myfile.txtそれprependが私のカスタムシェルであることが知られています:
#!/bin/sh
#add Line at the top of File
# @author Abdennour TOUMI
if [ -e $2 ]; then
    sed -i -e '1i$1\' $2
firelatifパスまたは絶対パスも使用します。正常に動作するはずです。
./prepend.sh "my New Line at Top"  ../Documents/myfile.txtこれの永続的なスクリプトが必要な場合nano /etc/bash.bashrcは、ファイルの最後にこの関数を開いて追加します:
function prepend(){
# @author Abdennour TOUMI
if [ -e $2 ]; then
    sed -i -e '1i$1\' $2
fi
}ターミナルを再度開いて楽しんでください:
prepend "another line at top" /path/to/my/file.txtそして、そのために本物のテキストエディタを使用してみませんか?edは標準のテキストエディターです。
ed -s filename <<< $'1i\nFIRST LINE HERE\n.\nwq'または、コマンドをより読みやすくしたい場合:
ed -s filename < <(printf '%s\n' 1i "FIRST LINE" . wq)1:最初の行に移動i:挿入モード.:挿入を停止し、通常モードに戻りますwq:書き込み、終了、ありがとう、さようなら。FIRST LINE?
                    first_line場合:ed -s filename < <(printf '%s\n' 1i "$first_line" . wq)。変数が単一のドットに展開されず、改行文字が含まれていないことを確認してください(ユーザー入力に由来する場合は、サニタイズしてください)。
                    常にawkオプションがあります。string変数をコンテンツに置き換えます。ただし、これはインプレースの変更ではありません。個人的に、私はその場で変更を加えない傾向があります。これは間違いなく個人的な好みです。2つのこと-vは、awk内の変数を意味し、変数はn行番号を効果的に一致させるためにここで使用されますNR == 1。nand の値を変更するだけで、さまざまな方法でこれを使用できますs。
string="My New first line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}'     file.source > file.target例:
% cat file.source                                                                                                                                      
First Line
Second Line
Third Line
% string="Updated First Line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}' file.source > file.target; cat ./file.target                      !698
Updated First Line
First Line
Second Line
Third Line
echo "deb http://extras.ubuntu.com/ubuntu precise main" | sudo tee -a /etc/apt/sources.list、管理者権限を取得するには、teeの前にsudoも必要です。しかし、いったいどうしてsources.listの一番上に何かを追加したいのでしょうか?