假设希望在 file_to_modified 文件最后新增一行以下信息:传入 shell 脚本文件的第一个参数,以及当前时间(YYYY-MM-DD HH:MMS)
- date "+%Y-%m-%d %H:%M:%S"
以上命令可以输出要求格式的当前日期与时间
- sed –i ‘$a text1 text2’ file_to_modified
使用 sed 在文件末尾新增一行,新增一行的内容为 text1 text2
在sed中,如果希望使用 shell 变量,则应当使用双引号将其括起来,如下:
sed -i '$a '"$1 ""$(date "+%Y-%m-%d %H:%M:%S")"'' file_to_modified
再进一步,如果希望使用 fpintf 语句生成以上的语句,则应考虑到转义字符等,如下:
FILE* shellFile;
if ((shellFile = fopen("/tmp/genGSMResetLog.sh", "w")) != NULL)
{
fprintf(shellFile, "#!/bin/sh\n\n");
fprintf(shellFile, "max_lines=101\n"); // max 100 entries.
fprintf(shellFile, "file_path=/opt/dnt/log/gsmresetlog\n\n");
fprintf(shellFile, "if [ ! -f $file_path ]; then\n");
fprintf(shellFile, "\ttouch $file_path\n");
fprintf(shellFile, "\techo \"Counter Hilo Reset date and time (UTC)\" >> $file_path\n");
fprintf(shellFile, "fi\n\n");
fprintf(shellFile, "sed -i \'$a \'\"$1 \"\"$(date \"+%%Y-%%m-%%d %%H:%%M:%%S\")\"\'\' $file_path\n"); // append the lasted entry in the last line
fprintf(shellFile, "lines=$(sed -n \'$=\' $file_path)\n");
fprintf(shellFile, "if [ \"$lines\" -gt \"$max_lines\" ]; then\n");
fprintf(shellFile, "\tsed -i \'2d\' $file_path\n"); // deleted 2nd line (the oldest entry)
fprintf(shellFile, "fi\n\n");
fprintf(shellFile, "exit 0");
fclose(shellFile);
}
以上为日前工作中遇到的问题,记录在引, 供日后及他人参考。