我想将“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替换/ mysqlApr4
datadir=/mysqlApr20
如果可能,我想评论较旧的datadir路径。
#datadir=/mysqlApr5
我可以输出当前日期:
date '+%b%d'
但是我想用“/ mysql”这个词来连接它,并替换或注释当前的datadir线。
答案 0 :(得分:4)
您可以使用sed和就地替换来执行此操作:
sed -i "s|^datadir=.*$|datadir=/mysql`date '+%b%d'`|" /etc/my.cnf
如果你想要注释掉旧行并添加一个新行,你可以使用sed进行评论,然后添加一个新行:
sed -i "s|^datadir=.*$|#\\0|" /etc/my.cnf
echo "datadir=/mysql`date '+%b%d'`" >> /etc/my.cnf
答案 1 :(得分:0)
Perl one-liner,可以就地编辑文件:
perl -i -nle 'BEGIN { $date = `date +%b%d` }; if (/^datadir=/) { print qq{#$_\ndatadir=/mysql$date} } else {print}' my.cnf
答案 2 :(得分:0)
awk -vd="$(date +%b%d)" '!/#/&&/datadir/{$0="#"$0"\ndatadir=/mysql"d}1' /etc/my.cnf>temp && mv temp file
答案 3 :(得分:0)
一举一动:
sed -i '/^datadir.*/{s.^.#.;s.$.\ndatadir=/mysql'$(date "+%b%d")'.;q}' /etc/my.cnf
这将注释掉未注释的行。它在旧文件的下方添加了新行,而不是在文件的末尾添加,因此它的工作方式类似于显示的AWK和Perl版本。