sed は、1 つではなく各行を置き換えます。

sed は、1 つではなく各行を置き換えます。

テストファイルの特定の行番号を変数で構成された文字列に置き換えようとしています。私の問題は、特定の行だけでなく、ファイル内のすべての行を文字列に置き換えるようです。

内容が頻繁に変更され、ある種の状態ファイルと同じであるため、行番号でなければなりません。これを実装する方法についてより良いアイデアを持つ人がいる場合は、耳を傾けます。

デフォルトでは、同期ジョブが完了したら、各ジョブの同期の開始時刻と終了時刻をstatus.configファイルに記録し、その特定のジョブに対して同期が実行されるたびに現在の行を上書きする必要があります。

laststartline=$(grep -n '$RCLONESESSION'LastStart $scriptdirectory/$mountsconfig | awk -F: '{print $1}') ##OBTAIN LINE NUMBER FOR LAST START TIME FOR THIS SESSION


sed -i ''$laststartline's/.*/'$RCLONESESSION'LastStart:'$time'/' $scriptdirectory/$mountsconfig ##REPLACE LINE IN MOUNTS.CONFIG WITH RELEVANT TIMESTAMP FOR JOB START

$laststartlineで指定された行だけでなく、ファイル全体を内容で上書きする理由を誰でも理解できますか?

役立つ場合:

$RCLONESESSION is predefined as rclone2
$time is defined as the current date and time in MM-DD-YYYY-HH-MM-SS format.
$scriptdirectory is defined as /root/scripts/
$mountsconfig is defined as status.config

22行目は私が変更したい行です。 from変数rclone2LastStart:?に置き換える必要があります。rclone2LastStart:MM-DD-YYYY-HH-MM-SS$time

これは別のセッションである可能性があるため、照会によって異なる行でなければならず、$RCLONESESSIONそれらを置き換える必要があります$mountsconfig

sed私のスクリプト内ではなく端末で直接実行するように、私のコマンドでこれを明確にしたいと思います。予想通り、1行が置き換えられます。

スクリプト内で実行されると、各行はパラメータに置き換えられます$time

ベストアンサー1

今は馬鹿のように感じます。問題が発生したのは、$ RCLONESESSIONの$ laststartline変数の引用符でした。

laststartline=$(grep -n '$RCLONESESSION'LastStart $scriptdirectory/$mountsconfig | awk -F: '{print $1}') ##OBTAIN LINE NUMBER FOR LAST START TIME FOR THIS SESSION

次に変更する必要があります。

laststartline=$(grep -n "$RCLONESESSION"LastStart $scriptdirectory/$mountsconfig | awk -F: '{print $1}') ##OBTAIN LINE NUMBER FOR LAST START TIME FOR THIS SESSION

@steeldriverの助けのおかげで、今すべてがうまくいきます。

おすすめ記事