sed中使用shell变量

假设希望在 file_to_modified 文件最后新增一行以下信息:传入 shell 脚本文件的第一个参数,以及当前时间(YYYY-MM-DD HH:MMsed中使用shell变量S)

  • 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);
}

以上为日前工作中遇到的问题,记录在引, 供日后及他人参考。

上一篇:linux中shell变量$#,$@,$0,$1,$2的含义


下一篇:JS页面快捷键库hotkeys.js