Добавьте выходные данные в виде новой строки в сценарии оболочки

#linux #shell #awk #grep #append

#linux #оболочка #awk #grep #добавить

Вопрос:

У меня есть файл журнала, log .txt в котором содержатся данные в приведенном ниже формате

 Name=abc Date=20140710
Name=xyz Date=20140715
Name=pqr Date=20140810  And so on
  

Я извлекаю данные на основе сегодняшней даты и добавляю их в файл журнала в новой строке

 today=$(date --date " 1 week"  %Y%m%d)

grep $today log.txt $'r' >> append_file.txt
  

Но когда я запускаю скрипт, он выдает мне исключение, подобное

 : No such file or directory
  

Кроме того, в append_file.txt он сохраняет данные в виде

 log.txt:Name=abc Date=20140710
  

В идеале он должен сохранять только данные, т. Е.

 Name=abc Date=20140710
  

На самом деле, моя конечная цель — отправить содержимое по почте append_file.txt , и я хочу, чтобы данные отображались в строке …… вот так

 Name=abc Date=20140710
Name=mno Date=20140710
  

В настоящее время данные отправляются в виде одной строки Name=abc Date=20140710 Name=mno Date=20140710

Есть предложения?

Комментарии:

1. -h for grep удалит имя файла, которое вы могли бы узнать сами с помощью простого man grep .

2. Чего вы хотите достичь с помощью $'r' ? Вероятно, это и является причиной ошибки, поскольку grep будет выполняться поиск файла с именем r .

Ответ №1:

Ваш вывод выглядит следующим образом:

 log.txt:Name=abc Date=20140710
  

Потому что grep думает, что вы предоставляете более одного файла для работы.

Проблема $'r' в этой строке:

 grep $today log.txt $'r' >> append_file.txt
  

Замените его на:

 grep $today log.txt >> append_file.txt
  

или, если вам нужно вставить r в конце каждой строки:

 grep $today log.txt | sed -e 's/$/r/g' >> append_file.txt
  

Комментарии:

1. Эй, есть ли какой-либо способ удалить строку из log.txt , взяв в качестве входных данных некоторую строку, подобную abc …….

2. Echo "Please enter the string :" затем в следующей строке read value …… если value присутствует в log.txt ….. он должен удалить эту строку…….

3. вы можете использовать sed -i.bak '/abc/ d' log.txt эту команду, которая удалит любую строку, содержащую abc , но она создаст log.txt.bak на случай, если вы захотите выполнить откат

4. используя переменную sed -i.back "/$string/ d" log.txt