2012-05-09 32 views
1

我有一個文件,cache.md,即開始了這樣的:用sed來替換文本文件的第一行上的Mac OS X Lion的

# 2012-05-09.8271 
CACHE MANIFEST 

CACHE: 
/index.html 

我想寫一個shell腳本(在OS X Lion中使用Automator)替換第一行並將文本(散列之後)更改爲今天的日期,一個點和一個隨機數。

這是我迄今爲止的bash腳本,但它什麼也沒做。

_now=$(date +"%Y-%m-%d") 
_rand=$RANDOM 
sed -i '' '1 s/[\d\-\.]+/$_now.$_rand/' ~/Desktop/cache.mf 

回答

2

使用此sed命令:

sed -i '' '1 s/^#.*$/'"# $_now.$_rand"'/' ~/Desktop/cache.mf 
+0

你是最接近我的解決方案。我不喜歡在正則表達式中使用*,但是使用sed的一行限制使其安全。 –

1

看起來像你離開-e關閉sed表達!

我沒有檢查你的sed表達式本身,但基本問題是你需要與-e選項,以確定您的sed的表達:

sed -i '' -e '1 s/[\d\-\.]+/$_now.$_rand/' ~/Desktop/cache.mf 
+0

不太正確,$ _ vars不會被shell解釋,因爲它們被封裝在''',al所以在輸入數據中'1'開頭不能和'#'一起工作。 – Benj

1

這裏亞去:

_now=$(date +"%Y-%m-%d") 
_rand=$RANDOM 
sed -i -e "s/# [0-9]\+-[0-9]\+-[0-9]\+.[0-9]\+/\# $_now.$_rand/" ~/Desktop/cache.mf 
+0

這不起作用。它只是在我的桌面上創建一個cache.mf-e文件,與原始文件相同。因爲我使用的是OS X Lion,它顯然與其他所有東西都有不同的sed語法,所以我有了額外的「前沿」。 –

+0

我在Linux Mint 12上測試過這個...很驚訝,sed是不同的。 –

+0

試試這個:sed -i''「s /#[0-9] \ + - [0-9] \ + - [0-9] \ +。[0-9] \ +/\#$ _now。 $ _rand /「〜/ Desktop/cache.mf ....可能需要前面的」extry「。 –