Использование нескольких операторов sed в командной строке

Поместите файл в /etc/cron.d/get2ndmonth с таким содержанием:

59 23 02 * * joe echo "mget test_text_$(date +\%Y\%m\%d)_*.csv" | ftp example.org

It будет запускаться каждые 2 месяца в 23:59 для пользователя joe .

(Пожалуйста, отредактируйте исходный вопрос, если он неясен)

1
19.12.2016, 01:02
2 ответа

Вероятно, можно объединить первые три вызова sed, как это

cat eciremoteExec1.txt | sort | uniq -c | awk -F " " '{print $3}' |
   sed 's/$/ working IP/;s/ working IP//; $ d' | paste -s -d ' ' |
   sed 's/working IP$//'

, но трудно сказать, не зная, какие входные данные допустимы, а какие желательны.

0
27.01.2020, 23:25

Речь идет не только об объединении нескольких sedкоманд. (Джейсен объяснил эту часть в своем ответе ). Вы можете узнать больше:

cat file | sort...

catне нужно, так как вы можете дать sortимя файла, вам не нужно catраньше, но сделайте

sort file | uniq -c | awk...

uniq -cудаляет дубликаты и добавляет счетчик, но, поскольку следующий awkиспользует только третий comlun, поэтому счетчик все равно сбрасывается. Вы можете удалить -cи заменить весь uniqопцией -uна sort:

.
sort -u file | awk -F " " '{print $2}' | sed...

Здесь вы неправильно используете awkвместо cut -d" " -f 2, но вы можете это сделать. Но теперь вы можете продолжить использовать awkили выполнить этот шаг и в sed. Нет необходимости переключать инструменты для задачи, которую одинаково можно выполнить в каждом инструменте :

.
sort -u file | sed 's/[^ ]* *\([^ ]*\).*/\1 working IP/'...

Здесь уже странно не знать исходный файл. Но если вы добавляете working IPк каждой строке, удалите его для всех в диапазоне до первого появления,это должно быть идентично добавлению во всех строках, кроме первой:

sort -u file | sed 's/[^ ]* *//;s/.*//;1!s/$/ working IP/'

Затем pasteможно легко включить в sed, собрав строки в удерживаемом пространстве и позже заменив первые новые строки пробелом, а все остальные — working IP. В то же время удаление последней строки($ d)может быть выполнено, поэтому целая миля -длинная командная строка с 6 различными командами и 8 трубами сгорает до простой sort, только одной трубы и короткой sedсценарий:

sort -u file | sed 's/[^ ]* *//;s/.*//;$!{H;1h;d;};x;s/\n/ /;s// working IP /g'

Идентичный результат без затрат целой жизни на чтение вариантов на manстраницах и анализ происходящего на каждом этапе.

3
27.01.2020, 23:25

Теги

Похожие вопросы