既存のファイルの先頭にテキストを挿入したい。どうすればこれを達成できますか。 echo
とtee
を試しましたが、成功しませんでした。
ターミナルからsources.list
ファイルの先頭にレポジトリ行を挿入しようとしました。
別の回答の方法がすでにわかっているため、1行の迅速な解決策が必要です。
sed
を使用すると、実際には非常に簡単です。
sed -i -e '1iHere is my new top line\' filename
1i
は、sedにファイルの1行目に続くテキストを挿入するよう指示します。最後の\
改行を忘れずに、既存の行1を行2に移動してください。
一般に、スクリプトを使用した所定の場所での編集は難しいですが、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
:書き込みと終了、ありがとう、さようなら。常にawk
オプションがあります。 string
変数をコンテンツに置き換えます。ただし、これはインプレースの変更ではありません。個人的に、私はその場で変更を加えない傾向があります。これは間違いなく個人的な好みです。 2つのこと、-v
はawkの変数を意味し、変数n
はここで行番号を一致させるために使用され、事実上NR == 1
です。 n
および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
ExモードでVimを使用できます。
ex -sc '1i|hello world' -cx sources.list
1
1行目を選択
i
テキストの新しい行を挿入
x
保存して閉じる