web-dev-qa-db-ja.com

bashスクリプトでファイルを編集する最良の方法は何ですか?

RHEL 5.8で/ bin/bashを使用していて、ファイルの編集を自動化したい。ファイルを検索してファイル内の行を置き換えるスクリプトが必要です。行の例:

Other line
Current date 01121990
Other line

この行を検索し、日付文字列を事前定義された日付に置き換えます。このファイルはサーバー固有のファイルからコピーされるため、新しいファイルにエコーして日付を入力できません。ありがとう!

7
Paul
your_date='your desired date'
sed -i "s/^Current date.*/Current date ${your_date}/" /path/to/file

それが最も簡単な方法です。これは、置換する日付を含むすべての行も「現在の日付」で始まる唯一の行であると想定しています。

このコマンドを実行するユーザーレベルには、そのファイルを編集する権限も必要です。

-iはインライン編集を意味します。つまり、ファイルを直接編集します。

^Current date.*

現在の日付で始まり、何かで終わるすべての行を意味します。つまり、行全体をsedの2番目の/.../部分にあるものに置き換えます。

変数が文字列ではなく変数として使用されるように、sedステートメントの前後に二重 "が使用されています。

15
Lizardx

edファイルのインプレース編集 も実行できます!編集したファイルのiノード番号は変更されません。

file='/path/to/file'
your_date='your desired date'
ls -i "$file"
printf '%s\n' H ",g/^Current date.*/s//${your_date}/" wq | ed -s "$file"
ls -i "$file"
1
charx