回答:
sed
の挿入(i
)オプションを使用して、前の行にテキストを挿入します。
sed '1 i\
質問作者の更新:
GNUを使用してファイルを所定の場所で編集sed
するには、-i
オプションを追加する必要があり
ました。
sed -i '1 i\anything' file
構文も
sed -i '1i text' filename
非GNU sedの場合
バックスラッシュの1i\
後と直後にリターンキーを押す必要がありますfirst_line_text
:
sed -i '1i\
first_line_text
'
また、一部の非GNU sed
実装(たとえば、macOS上の実装)では、フラグの引数が必要です-i
(-i ''
GNUと同じ効果を得るために使用しますsed
)。
-i
オプションなしでは機能しません。回答する前に回答を更新します。
sed (GNU sed) 4.2.2
単に sed '1 i text to insert' -i file
魅力のように働きました。ありがとう
awk
以下の私の悪いランクの回答を参照してください。これは動作するはずです。
エコーは、テキストを取得するために使用されます。Catファイル名-コンソールにファイルを印刷し、それを使用して別のファイルfilename1に送信し、filename1をfilenameに移動して、目的のファイルの最初の行にテキストを挿入します。
(echo "some text" && cat filename) > filename1 && mv filename1 filename
sed -i '1i new_text' file_name
この-i
オプションを指定しない場合、エラーは表示されず、標準の端末に出力が表示されますが、ファイルにテキストは挿入されません。
-i
スイッチに関するものではありません。
gnu sed
gnu sed
i
0a
あなたが試みたコマンドがないで動作しex
、前任者にはvi
:
printf '%s\n' 0a 'Anything you want to add' . x | ex file.txt
printf
それ自体でコマンドが出力されます。
0a
Anything you want to add
.
x
0a
手段は、0行目の後に(つまり、最初の行の前に)追加します。
次の行または複数行は、追加するリテラルテキストです。
.
それ自体で上の行は、「追加」コマンドを終了します。
これx
により、Exはファイルへの変更を保存して終了します。
この古い質問では、誰もが最も一般的な(この場合は非常に単純な)sedコマンドを示していないことに驚いています。
$ sed -i '1s/^/new_text\
/' file_name
これはほとんどのシェルで動作し、いくつかのsedバージョンに移植可能です。
GNU sedが利用可能な場合、これを使用できます。
$ sed -i '1s/^/new_text\n' file_name
違いは、GNU sed \n
では改行にa を使用できることと、バックスラッシュが先行するリテラル改行が必要なことです(GNU sedでも動作します)。
$'…'
構文を受け入れるシェルが使用されている場合は、改行を直接挿入できます。そのため、sedは、改行がすでに存在することを確認します。
$ sed -i $'1s/^/new_text\\\n/' file_name
これは、より多くのsedバージョンで機能します。
残念ながら、上記のすべての回答(ほとんどがsed
)は、最初の行をすべて置き換えたため、うまくいきませんでした。私はUbuntu 16.04 LTS
マシンに乗っています。ここに私の回避策がありGNU Awk 4.0.2
ます:
awk '{if(NR==1){$0="NEW_FIRST_LINE"$0; print $0} ;if(NR!=1){print $0}}' file_name
sed
置換を使用する答えは1つだけですが、既存の行を置換しません。
ファイルの先頭/末尾にテキストを挿入/追加する方法を検索した人は、おそらく他の方法も知っている必要があると思います。
cal | \
gsed -E \
-e '1i\{' \
-e '1i\ "lines": [' \
-e 's/(.*)/ "\1",/' \
-e '$s/,$//' \
-e '$a\ ]' \
-e '$a\}'
これは、cal
出力がgnu-するパイプsed
(と呼ばれるgsed
介してインストールMacOSでbrew.sh拡張正規表現(と)-E
)及び6「スクリプト」適用(-e
)でエスケープ改行\
読みやすくするため。スクリプト1と2は1i\
、「1行目で挿入」に使用します。スクリプト5および6は$a\
、「行<last>で追加」するために使用します。テキスト出力を垂直方向に揃えて、結果に期待されるものをコードに表示させました。スクリプト3および4は置換を行います(後者は「行<最後>」にのみ適用されます)。その結果、コマンド出力が有効なJSONに変換されます。
{
"lines": [
" October 2019 ",
"Su Mo Tu We Th Fr Sa ",
" 1 2 3 4 5 ",
" 6 7 8 9 10 11 12 ",
"13 14 15 16 17 18 19 ",
"20 21 22 23 24 25 26 ",
"27 28 29 30 31 ",
" "
]
}
1i
、最初の行の前にテキストを挿入する4つの回答が既にあります。この質問を持つ人は、彼らの問題を解決するためにあなたの答えから必要な部分を抽出する必要があります。質問は無料ですので、具体的な答えを提供するために、あなた自身の質問をしてください。