1

我有一个需要修改的变量,以便添加分钟 %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

4

3 回答 3

3
# sed -i "s/%H'/%H-%M'/" mysed.txt

这应该有效。这样,只有在 %H 旁边有引号时才会进行替换。

于 2013-02-07T06:36:33.983 回答
0

在替换之前测试它是否存在:

sed '/%H-%M/! s/%H/%H-%M/' mysed.txt

顺便提一句。%不需要逃脱。

于 2013-02-07T11:20:19.797 回答
0

我相信下面的命令可以正常工作。请将 test.dat 文件替换为您的文件名。

cat test.dat|sed "s/\%H\'/\%H\-\%M\'/" > test.dat

没有 cat 命令

sed -i "s/\%H\'/\%H\-\%M\'/" test.dat >  test.dat

干杯!

于 2016-03-14T07:42:42.397 回答