#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
forgrep
удалит имя файла, которое вы могли бы узнать сами с помощью простого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