2017-07-15 15 views
-6

sedを使用して別のテキストファイルの最初の行を置き換えます。sedを使用してテキストファイルの最初の行を置き換えます。

置き換えられる行には、$ variableを指定する必要があります。

+1

ある[、最小完全、かつ検証例を作成するためにどのように読む。](https://stackoverflow.com/help/mcve) – badiya

+0

この質問はありません研究努力はしていません。 – melpomene

+0

コードを表示してください。スタックオーバーフローはあなたからの閉鎖理由を隠すので:*デバッグのヘルプを求める質問( "なぜこのコードは機能していないの?")は、質問自体にそれを再現するのに必要な特定の問題やエラー、 。明確な問題文がない質問は、他の読者にとって有用ではありません。参照してください:[最小、完全、および検証可能な例の作成方法](https://stackoverflow.com/help/mcve)。* – jww

答えて

-1
var1=$(systemd-escape $var) 
sed -ri '[email protected]^.*[email protected]'"$var1"'@' filename 

ここで、$ varはダイナミック変数を参照していますが、最初の行に集中して、行の最初から最後までをvar変数で置き換えます。変数をsedステートメントに展開することを含む単一引用符の位置に注意してください。安全にこれを行うには

+0

'$ var'を引用符で囲まないと、一般的には動作しません。 – chepner

+0

"ベルトとブレース"を追加すると、変数varをsystemd-escapeでエスケープし、変数が返す引用符(var1) –

+0

'systems-escape'は' sed'コマンドではなく、有効な 'systemd'ユニット名を作成するように設計されています。 – chepner

0

のみ(合理的に簡単な)方法は

  1. にある最初の行を削除します。
  2. 修正されたファイルを一時ファイルの新しい最初の行と結合します。
  3. 元のファイルを一時ファイルに置き換えます。そうする

一つの方法は、

{ printf '%s\n' "$variable"; sed '1d' original.txt; } > tmp.txt && mv tmp.txt original.txt 
+0

一時ファイルを使用する場合は、/ tmpにファイルを作成するか、使用後に一時ファイルを削除するのが最善です。 –

+0

一時ファイル*は、元のファイルに名前が変更される(つまり上書きされる)という意味で削除されます。 – chepner

関連する問題