テキスト 1 行を含むファイルがあります。エディタを使用せずに内容を変更できますかvi
?
例は次のとおりです。
PROCESS DATE =2014-08-01
2014-08-01
翌日に日付を追加したいと思います。私の考えは変数を作ることです。どうすればいいですか?
答え1
あなたが使用できるperl
:
perl -MTime::Piece -pi -e 's/\d{4}-\d\d-\d\d/
(Time::Piece->strptime($&,"%Y-%m-%d")+24*60*60)->date/ge' file
ファイルのすべての日付が増加します。
答え2
私は次のように書くでしょう:
increment_date() {
local current=$(grep -oP 'PROCESS DATE =\K.+' file)
local next=$(date -d "$current + 1 day" +%F)
sed -i "/PROCESS DATE =/s/$current/$next/" file
}
cat file
increment_date
cat file
increment_date
cat file
PROCESS DATE =2012-02-28
PROCESS DATE =2012-02-29
PROCESS DATE =2012-03-01
これは、PROCESS DATE行がファイルに一度だけ現れ、それ自体が1行を占めると仮定します。
答え3
必要な複雑さのレベルによって異なります。必要なものをa01
に変更する02
次のものを使用できます。
sed -i 's/01/02/' file
または
perl -i -pe 's/01/02/' file
または、安全のために01
行の末尾にある場合にのみ、次の手順を実行してください。
sed -i 's/01$/02/' file
perl -i -pe 's/01$/02/' file
このフラグにより、上記の両方のソリューションは元のファイルを変更します-i
。
2014-02-28
実際の日付(増分など)を考慮する必要がある場合は、2014-03-01
日付を解析するか、次のものを使用できる本格的なプログラミング言語を使用する必要がありますdate
。
$ while IFS='=' read -r text date; do
echo "$text=$(date -d "$date + 1 day" +%F)";
done < file > new_file
上記は入力ラインを分割し、=
前の部分をasとして保存し、残りの部分をasとして保存します。次に、日付を追加するなどの素晴らしい日付操作を実行できるコマンドに入力し、目的の形式で印刷します(この場合、形式は形式を意味します)。これはGNU日付を想定しています。=
$text
$date
$date
date
%F
Year-Month-Day
このecho
コマンドは、内容を印刷$text
し、1 日ずつ増加した日付を印刷します。=
ファイルの1行に複数行があると、この操作は失敗します。
答え4
私のもの日付ツールdadd
テキストファイルを繰り返し、見つかった各日付に何かを追加するコマンドラインツールを提供します。
$ dadd -S +1d FILE
PROCESS DATE =2014-08-02