.sed、.bash、および.txtファイルがあります。
x.bashファイルにこれがあります
#!/bin/bash
./y.sed "$1"
z.txt ファイルには次のものがあります。
<dstamp>
y.sedファイルには、<dstamp>を見つけて現在の日付に置き換えるこのコマンドがあります。
#!/bin/sed -rf
s/<dstamp>/$(date '+%Y%m%d')/g
これはうまくいきません。 <dstamp> をリテラル $(date '+%Y%m%d') に置き換えます。
実行する
./x.bash z.txt
output: $(date '+%Y%m%d')
ただし、コマンドは端末で正しく機能します。
sed -r "s/<dstamp>/$(date '+%Y%m%d')/g" z.txt
output: 20221014
.sedファイルでこのコマンドを機能させるにはどうすればよいですか?
答え1
この試み。 y.sed ファイルに次の 2 行しかないとします。
#!/usr/bin/sed -rf
s/<dstamp>/$(date '+%Y%m%d')/g
x.bashファイルの検索文字列を更新し、文字列を変数に置き換えました。 y.sed ファイルに他のデータがある場合は、x.bash ファイルの最後の行の echo ステートメントで構成します。これは単なる解決策です。
注:このスクリプトを実行すると出力が出ないことがあります。 4~5回程度してご確認ください。
以下はx.bashファイルです。
#!/bin/bash
time_data=$(date +'%Y%m%d')
echo "Updating variable values in y.sed script"
str="<dstamp>" date_value=${time_data} envsubst '$str $date_value' < y.sed | tee /root/scripts/y.sed
echo "Setting permission to y.sed file"
chmod 755 /root/scripts/y.sed
./y.sed "$1"
echo -e '#!/usr/bin/sed -rf \n\ns/$str/$date_value/g' > y.sed
以下はy.sedファイルです。
#!/usr/bin/sed -rf
s/$str/$date_value/g
以下は、z.txt ファイルの内容です。
Test line 1
Test line 2 with <dstamp>
Test line <dstamp> and other data
<dstamp> in Test line 3
New line <dstamp> in line 4
Test line 5
出力:
Updating variable values in y.sed script
#!/usr/bin/sed -rf
s/<dstamp>/20221015/g
Setting permission to y.sed file
Test line 1
Test line 2 with 20221015
Test line 20221015 and other data
20221015 in Test line 3
New line 20221015 in line 4
Test line 5
答え2
すでにbashスクリプトを使用している場合は、sedスクリプトを生成する必要はありません。
#!/bin/bash
sed 's/<dstamp>/'"$(date '+%Y%m%d')"'/g' "$1"