2010-04-20 171 views
1

我想用當前日期替換在「datadir」行末尾找到的日期。 例如我的my.cnf文件看起來像這樣...替換文本字符串

# head /etc/my.cnf 
[mysqld] 

#mount -t tmpfs -o size=102m tmpfs /mnt 
#datadir=/mnt 
read-only 
datadir=/mysqlApr5 
#datadir=/mysqlApr2 
#datadir=/mysqlMar16 
#datadir=/mysqlFeb25a 

大多數行都是註釋。我需要找到一個沒有被註釋掉datadir的線,然後用/ mysqlApr20

datadir=/mysqlApr20 

更換/ mysqlApr4如果有可能,我會想發表評論舊DATADIR路徑。

#datadir=/mysqlApr5 

我可以輸出當前日期爲:

date '+%b%d' 

但我想用字「/ MySQL的」到Concat的它,並更換或評論當前的datadir線。

sed -i "s|^datadir=.*$|datadir=/mysql`date '+%b%d'`|" /etc/my.cnf 

如果你想註釋掉舊線,並添加一個新的,你可以用sed做評論,只是追加:

回答

4

你可以用sed和就地更換做新行:

sed -i "s|^datadir=.*$|#\\0|" /etc/my.cnf 
echo "datadir=/mysql`date '+%b%d'`" >> /etc/my.cnf 
0

Perl的一個班輪其編輯就地文件:

perl -i -nle 'BEGIN { $date = `date +%b%d` }; if (/^datadir=/) { print qq{#$_\ndatadir=/mysql$date} } else {print}' my.cnf 
0
awk -vd="$(date +%b%d)" '!/#/&&/datadir/{$0="#"$0"\ndatadir=/mysql"d}1' /etc/my.cnf>temp && mv temp file 
0

所有一舉:

sed -i '/^datadir.*/{s.^.#.;s.$.\ndatadir=/mysql'$(date "+%b%d")'.;q}' /etc/my.cnf 

這將註釋掉註釋掉線。它將新行緊接在舊文件的下面,而不是在文件末尾,因此它與AWK和Perl版本類似。