我编辑了帖子,并按照您的建议,将工作分成更多文件。
我要替换文件中的文本块,但要在定界符之后
<-FROM NEXT LINE->
code to be replaced
code to be replaced
code to be replaced
<-TO THE LINE ABOVE->
由于我收集在线数据,因此数据的时间不同,因此必须替换的代码也不同。
这是脚本的一部分:
#!/bin/bash
set -x
########## CONFIGURATIONS ##########
live_data_url='https://www.somedata.com/api/url'
live_data_list_file=~/jjjjjjjj
file_to_modify=~/kkkkkkk
########## CONFIGURATIONS ##########
########## FUNCTIONS ##########
function upgrade() {
echo "Downloading/Upgrading traker data ..."
wget -O $live_data_list_file $live_data_url
if [[ $? -ne 0 ]]; then
echo "I can't download the data, I'll use a static one"
exit 9
fi
echo "Downloading/Upgrading done."
}
########## FUNCTIONS ##########
upgrade
sed -i -ne '/STARTINGPOINT+1LINE/ {p; r $live_data_list_file' -e ':a; n; /ENDINGPOINT-1LINE/ {p; b}; ba}; p' $file_to_modify
目标是升级$file_to_modify
部分中的块:
<-FROM NEXT LINE->
code to be replaced
code to be replaced
code to be replaced
<-TO THE LINE ABOVE->
所以我进行了一些搜索,找到了一个很好的起点,但是我不知道如何修改它。使用sed不是必需的,也许存在一种更好的方法来执行此操作
其实我有两个困难
1.我需要在包含<-FROM NEXT LINE->
的行之后开始,并且需要在<-TO THE LINE ABOVE->
上方的行停止
2. $live_data_list_file
在sed阶段无法扩展,因此我无法从文件中获取数据。
您有更好的主意吗?
答案 0 :(得分:1)
不要将数据存储在脚本中,而要保留实时数据文件。也就是说,将数据下载到$live_data_list_file
,将wget下载到临时文件,如果wget成功,则将临时文件复制到实时数据文件上。另外,那么您无需在其他位置编辑该文件-如果wget失败,则必须将其保留为下一次运行的原始文件。
也许是这样的:
function upgrade() {
echo "Downloading/Upgrading tracker data ..."
# grab the current data into a temporary file
wget -O ${live_data_list_file}.temp $live_data_url
if [[ $? -ne 0 ]]; then
echo "I can't download the data, I'll use the last one"
else
# succeeded, so the temp file is our real file.
mv ${live_data_list_file}.temp ${live_data_list_file}
fi
echo "Downloading/Upgrading done."
}
upgrade()
# don't modify ${live_data_list_file} in the rest of your code - use another temporary file if you need to modify it.
# and just use ${live_data_list_file}, not the data "inside" your code