SED命令的语法



我在服务器上有一个文件。

logFiles: ["responseActions.csv.2015-04-24","responseActions.csv.2015-04-25","responseActions.csv.2015-04-26"]

我必须使用sed命令更改每个文件的日期。

我的脚本如下。

echo -n "Enter first date (format: YYYY-mm-dd): "
read startDate
echo "startDate outside loop: $startDate"
echo -n "Enter last date (format: YYYY-mm-dd): "
read endDate
echo "endDate outside loop: $endDate"
d1=$(date -d "$endDate" +%s)
echo "d1 = $d1"
d2=$(date -d "$startDate" +%s)
echo "d2 = $d2"
datediff=$(($(((d1-d2)/86400))+1)) 
echo "datediff = $datediff"
count=1
echo "count outside loop: $count"
while test $count -le $datediff 
do
echo "count=$count"
echo "datediff=$datediff"
echo "Entered in loop"
date1=`date +%Y-%m-%d -d "$startDate -1 day"`
echo "date1 = $date1"
date2=`date +%Y-%m-%d -d "$startDate +1 day"`
echo "date2 = $date2"
sed -i "s/startDate:.*18:30:00/startDate: $date1 18:30:00/g" configdaily.yml
sed -i "s/endDate:.*18:30:00/endDate: $startDate 18:30:00/g" configdaily.yml
**sed -i "s/logFiles:*]/logFiles: ["responseActions.csv.$date1","responseActions.csv.$startDate","responseActions.csv.$date2"]/g" configdaily.yml**
sleep 10
startDate=$(date +%Y-%m-%d -d "$startDate +1 day")
echo " startDate inside loop: $startDate"
count=$((count+1))
echo "count inside loop: $count"
done

在上面的脚本中,您可以看到三个sed命令,其中第三个sed命令没有提供所需的输出。

因此,请建议在第三级命令中提出适当的语法或更改。

看来您正在使用 logfiles:*,可能是您的意思是 logfiles:.*。表达式:*表示字面结肠特征的零或更多重复。表达式.*表示任何字符的零或更多重复(请注意,.是如何匹配除newline以外的任何单个字符的Metacharacter)的。

切线,在同一文件上连续运行三个连续的sed脚本有些浪费。您应该能够将它们组合到一个脚本中:

sed -i -e "s/startDate:.*18:30:00/startDate: $date1 18:30:00/" 
       -e "s/endDate:.*18:30:00/endDate: $startDate 18:30:00/" 
       -e "s/logFiles:.*]/logFiles: ["responseActions.csv.$date1","responseActions.csv.$startDate","responseActions.csv.$date2"]/" configdaily.yml

我还在所有这些上删除了/g标志,因为您的任何模式似乎都不可能在同一行上匹配一次以上。g的含义是在有多个匹配项时在同一行上重复匹配。

sed -i "
   s#startDate:.*18:30:00#startDate: ${date1} 18:30:00#g
   s#endDate:.*18:30:00#endDate: $startDate 18:30:00#g
   s#logFiles:*]#logFiles: ["responseActions.csv.${date1}","responseActions.csv.${startDate}","responseActions.csv.${date2}"]#g" configdaily.yml
  • 操作可以通过新行或;分开,也可以最终在几个-e "Action"
  • 中分开
  • 我使用的是othjer分离器,而不是 /,因为日期和文件名可以使用它,但是如果没有 /在变量内容或模式中,则不是强制性的
  • g是可选的,因为它仅处理每行1例

相关内容

  • 没有找到相关文章

最新更新