既存のファイルの先頭にテキストを挿入したい。どうすればこれを達成できますか。私が試した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
fi
relatifパスまたは絶対パスも使用します。正常に動作するはずです。
./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
。n
and の値を変更するだけで、さまざまな方法でこれを使用できます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の一番上に何かを追加したいのでしょうか?