Я новичок в программировании!
Может ли кто-нибудь помочь удалить :
на первой позиции в отметке времени::29.06.2019 23:03:17
В настоящее время я пытаюсь сделать это с помощью команд awk / cut, как показано ниже:
TDS="$(grep 'Logfile started' process.log | awk '{print $3,$4}' | cut -d: -f2)"
echo "$TDS"
29.06.2019 23
И выход не то, что я хотел! Я хочу напечатать это как 29.06.2019 23:03:17
.
источник
Вот
sed
решение:Команда
sed 's/^://'
выполняет заменуs
символа двоеточия:
в начале^
каждой строки пустой строкой//
.Вот хитрое
awk
решение, в котором мы меняем разделитель полей^:
, как описано выше, и выводим второе поле (каждой строки):Задача может быть выполнена также с
grep
( объяснением ), возможно, это может быть самым быстрым решением для большого количества данных:Или обработайте файл напрямую с помощью следующей команды, в
^
которой снято ограничение :Вышесказанное может быть достигнуто также
sed
и группами захвата()->\1
:Где выражение
^.*<something>.*$
будет соответствовать всей строке, которая содержит<something>
. Командаs/old/new/
заменит эту строку содержимым первой группы захвата (выражение в скобках может быть более конкретным). Опция-r
включает расширенные регулярные выражения. Опция-n
подавит нормальный выводsed
и, наконец, командаp
напечатает совпадения.источник
awk
мог бы иметь многосимвольную FS с персонажами со специальным значением! То, что я узнал сегодня.Поскольку вы уже обрабатываете это
awk
, вы можете сделать все это напрямую:В
sub
целом формат команды являетсяsub(/REGEX/, REPLACEMENT, TARGET)
и заменит все матчи для регулярного выраженияREGEX
со строкойREPLACEMENT
во входной строкеTARGET
. Здесь мы заменяем первое:
(^
означает «начало») из 3-го поля ($3
) ничем.Конечно, если вы делаете это в awk, вы можете также сделать все в awk и выполнить все это за одну операцию:
Или, в вашем случае:
источник
Другое решение Bash:
xargs
преобразуетstdin
(стандартный ввод) в позиционные параметры дляbash
команды.echo
наtail -n1 /path/to/reportfile.txt
.источник