Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
限制sed命令_Sed - Fatal编程技术网

限制sed命令

限制sed命令,sed,Sed,我有一个需要修改的变量,以便添加分钟数%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,如下所示

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


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

如果在替换之前有引号,则进行测试:

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

顺便说一句,
%
不需要转义。

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

cat test.dat|sed "s/\%H\'/\%H\-\%M\'/" > test.dat
没有猫的命令

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

干杯

您的想法是正确的,但是您的一些语法是不正确的——shell语法(您不能通过使用
\'
'
嵌入
'.
)和
sed
语法(您需要在末尾使用
/
)都是反斜杠。而且,没有理由在
%
前面加反斜杠。(OP做到了,但它不是必需的。)因此,我认为您需要编写
“s/%H'/%H-%M'/”
sed -i "s/\%H\'/\%H\-\%M\'/" test.dat >  test.dat