web-dev-qa-db-ja.com

コマンドラインを使用してテキストファイルの先頭に行を挿入するにはどうすればよいですか?

既存のファイルの先頭にテキストを挿入したい。どうすればこれを達成できますか。 echoteeを試しましたが、成功しませんでした。

ターミナルからsources.listファイルの先頭にレポジトリ行を挿入しようとしました。

注意

別の回答の方法がすでにわかっているため、1行の迅速な解決策が必要です。

25
Anwar

sedを使用すると、実際には非常に簡単です。

  • sed -i -e '1iHere is my new top line\' filename

  • 1iは、sedにファイルの1行目に続くテキストを挿入するよう指示します。最後の\改行を忘れずに、既存の行1を行2に移動してください。

38
ish

一般に、スクリプトを使用した所定の場所での編集は難しいですが、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で遊んでいる場合、これを本当に失いたくないので、エラーなどを検出するために検証と防弾を追加する必要があります。しかし、それは別の質問です:-)

7
Sean
./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
6
Abdennour TOUMI

そして、そのために本物のテキストエディタを使用してみませんか? edは標準のテキストエディターです。

ed -s filename <<< $'1i\nFIRST LINE HERE\n.\nwq'

または、コマンドをより読みやすくしたい場合:

ed -s filename < <(printf '%s\n' 1i "FIRST LINE" . wq)
  • 1:最初の行に移動
  • i:挿入モード
  • 挿入したいもの...
  • .:挿入を停止し、通常モードに戻ります
  • wq:書き込みと終了、ありがとう、さようなら。
5
gniourf_gniourf

常に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
3
slashdot

ExモードでVimを使用できます。

ex -sc '1i|hello world' -cx sources.list
  1. 1 1行目を選択

  2. iテキストの新しい行を挿入

  3. x保存して閉じる

2
Steven Penny