我有一个需要修改的变量,以便添加分钟%M。我知道sed命令,它正在按预期工作。
# cat mysed.txt
myfirstfile="comany$mydb`date +'%d-%b-%Y-%H'`.sql"
# sed -i 's/\%H/\%H-\%M/' mysed.txt
# cat mysed.txt
myfirstfile="company$mydb`date +'%d-%b-%Y-%H-%M'`.sql"
但如果我再次运行相同的sed命令,它将再次添加%M,如下所示。
# sed -i 's/\%H/\%H-\%M/' mysed.txt
# cat mysed.txt
myfirstfile="company$mydb`date +'%d-%b-%Y-%H-%M-%M'`.sql"
我需要一个sed命令,即使sed命令执行两次(错误),也应该只添加分钟%M一次
答案 0 :(得分:3)
# sed -i "s/%H'/%H-%M'/" mysed.txt
这应该有效。这样,只有在%H旁边有引号时才会进行替换。
答案 1 :(得分:0)
在替换之前测试它是否存在:
sed '/%H-%M/! s/%H/%H-%M/' mysed.txt
顺便说一下。 %
不需要转义。
答案 2 :(得分:0)
我相信下面的命令会正常工作。请将test.dat文件替换为您的文件名。
cat test.dat|sed "s/\%H\'/\%H\-\%M\'/" > test.dat
没有cat命令
sed -i "s/\%H\'/\%H\-\%M\'/" test.dat > test.dat
干杯!