2013-02-07 93 views
1

我有一個變量,需要修改,以便分鐘%M被添加。我知道sed命令,它按預期工作。限制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命令應該添加分鐘%M只即使執行sed命令一次兩次(錯誤)

回答

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

這應該工作。這樣只有在%H旁邊有引號時纔會進行替換。

+1

你有正確的想法,但你的一些語法是關閉的 - 兩個shell語法(你不能在''...''裏面使用'\'''嵌入''',因爲反斜槓不是' t在''...'')和'sed'語法中被認爲是特殊的(最後你需要一個'/')。另外,沒有理由在'%'前加反斜槓。 (OP做了,但不需要)所以,我想你想寫's /%H'/%H-%M'/「'。 – ruakh

+0

啊謝謝,我只是想着正則表達式。編輯。 – placeybordeaux

0

測試,如果它是代之前存在:

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

順便說一句。 %不需要轉義。

0

我相信下面的命令會正常工作。請用您的文件名替換test.dat文件。

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

沒有cat命令

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

乾杯!