将输出文本文件字符串更新为命令行参数时出现批处理脚本问题

时间:2012-02-21 11:19:34

标签: shell batch-file

我是bach脚本的新手。以下是我用来搜索通过命令行输入的名称的代码,并在outputLog.txt中搜索输入的字符串。如果发现更新了该名称字符串的当前系统时间。

在命令行中 [root @ localhost desktop]#。/ myscript.sh name1

Logone2.txt
name1 = Tue Jan  20 14:00 19 IST 2012 
name2 =Tue Jan  20 14:05 19 IST 2012 
name3 = Tue Jan  20 14:20 19 IST 2012 
name4 =Tue Jan 20 14:45 19 IST 2012 

我的问题是当我尝试输入name1时,它会使用当前系统时间进行更新,同时它也会作为最后一个条目附加。

 Eg:Logone2.txt
    name1 = Tue Feb    20 14:00 19 IST 2012 
    name2 =Tue Jan  20 14:05 19 IST 2012 
    name3 = Tue Jan  20 14:20 19 IST 2012 
    name4 =Tue Jan 20 14:45 19 IST 2012
    name1 = Tue Feb    20 14:00 19 IST 2012 (appended entry)

我只想用当前系统时间附加字符串,如果在Logone2.txt.IF中找不到,则在Logone2.txt中找到通过命令行输入的字符串(name1),用当前系统时间更新名称如下。

  Eg:Logone2.txt
name1 = Tue Feb    20 14:00 19 IST 2012 
name2 =Tue Jan  20 14:05 19 IST 2012 
name3 = Tue Jan  20 14:20 19 IST 2012 
name4 =Tue Jan 20 14:45 19 IST 2012

以下是使用

的代码
#!/bin/bash
echo "${1} $(date)" >> /root/Desktop/scripts/Logone2.txt
fgrep "${1}" /root/Desktop/scripts/Logone2.txt && \ 
     sed -i "/${1}/ s/.*/${1} = $(date)/" /root/Desktop/scripts/Logone2.txt || \
echo "${1} $(date)" >> /root/Desktop/scripts/Logone2.txt

1 个答案:

答案 0 :(得分:1)

如果我说得对,我的第一个想法是用sed重写整个文件替换name1。例如

cat Logone2.txt | sed "s/^name1=.*/name1=`date`/g" > newfile.txt