проблема пакетного скрипта при обновлении строки выходного текстового файла в качестве аргумента командной строки - PullRequest
0 голосов
/ 21 февраля 2012

Я новичок в скрипте Баха.Ниже приведен код, который я использовал для поиска имени, введенного через командную строку, и поиска введенной строки в 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. Если строка (имя1), введенная с помощью командной строки, найдена в Logone2.txt, обновите имя с текущимсистемное время следующим образом.

  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 Ответ

1 голос
/ 21 февраля 2012

, если я правильно понял, моя первая идея - переписать весь файл, заменив name1 на sed. например

cat Logone2.txt | sed "s/^name1=.*/name1=`date`/g" > newfile.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...