.sedファイルを使用し、.bashファイルからその.sedファイルを呼び出すときにsedを使用して単語を見つけて現在の日付に置き換えますか?

.sedファイルを使用し、.bashファイルからその.sedファイルを呼び出すときにsedを使用して単語を見つけて現在の日付に置き換えますか?

.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

おすすめ記事