Как я добавляю новые строки между строками, распечатанными на командной строке?

Литеральный ответ - поскольку другие дали: потому что текущий каталог не находится в Вашем $PATH.

Но почему? Короче говоря, это для безопасности. Если Вы смотрите в чужом корневом каталоге (или/tmp) и вводите просто gcc или ls, Вы хотите знать о выполнении реального не злонамеренная версия друг шутника записал, который стирает все файлы. Другой пример был бы test или [, который мог бы переопределить те команды в сценариях оболочки, если Ваша оболочка не имеет их, как создано-ins.

Наличие . поскольку последняя запись в Вашем пути немного более безопасна, но существуют другие нападения, которые используют это. Легкий должен использовать общие опечатки, как sl или ls-l. Или, найдите общую команду, которая, оказывается, не установлена в этой системе — vim, например, так как системные администраторы имеют необычную вероятность для ввода этого.

31
25.01.2018, 01:23
6 ответов
sed G 
# option: g G    Copy/append hold space to pattern space.

G не часто используется, но хорош с этой целью. sed поддерживает два пространства буфера: “пространство шаблона” и “содержит пространство”. Строки, обработанные sed обычно, текут через пространство шаблона, поскольку различные команды воздействуют на его содержание (s///, p, и т.д.); пространство хранения начинается пустой и только используется некоторыми командами.

G команда добавляет новую строку и содержание пространства хранения к пространству шаблона. Вышеупомянутое sed программа никогда ничего не помещает в пространство хранения, таким образом, G эффективно добавляет просто новую строку к каждой строке, которая обрабатывается.

53
27.01.2020, 19:37
  • 1
    e не необходим. передача по каналу whatever | sed G должен добиться цели. –  frabjous 15.10.2010, 05:25
  • 2
    @frabjous: Право, мог бы также кончить -e так как там нам только нужен единственный аргумент команды. –  Chris Johnsen 15.10.2010, 21:49
  • 3
    Я могу дать Вам как, +2? Закрепляет его! –  Christian Bongiorno 28.09.2017, 20:40
  • 4
    , но, это - только шоу в stdout, но не сохраняют его –  biolinh 18.10.2017, 15:20

Используйте awk для добавления дополнительной новой строки. Это также позволяет Вам отфильтровать вещи, которые Вы не хотите.

awk '{print $0,"\n"}' | less
9
27.01.2020, 19:37

Используйте sed и замените целую строку отдельно плюс один дополнительный символ новой строки:

grep foo /var/log/maillog | sed -e "s/^.*$/&1\n/"
5
27.01.2020, 19:37
  • 1
    немного более простая sed замена была бы 's/$/\n /', хотя команда 'G' @Chris Johnsen еще более проста. –  camh 15.10.2010, 08:05

Это то, что Вы после?

grep SPAM mail.log | while read -r line; do echo; echo $line; done

3
27.01.2020, 19:37
  • 1
    Вы, вероятно, захотите использовать read -r постараться не рассматривать символы обратной косой черты как особенные. –  Chris Johnsen 15.10.2010, 04:57

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

cat file.log > log.txt и gedit log.txt или терминальный редактор как нано

Править: или cp file.log log.txt который, конечно, легче и быстрее... благодаря комментарию KeithB

0
27.01.2020, 19:37
  • 1
    Почему cat и нет cp? уверенный –  KeithB 15.10.2010, 16:21
  • 2
    cp было бы легче и быстрее!... lol - я читал другие ответы, имеющие дело с grep и awk таким образом, я записал это cat путь, но я исправляю это, спасибо –  laurent 15.10.2010, 16:49

Направить |любой вывод на:

sed G

Пример:

ls | sed G

Если ты man sedувидишь

GДобавляет символ новой строки, за которым следует содержимое пробела, в пространство шаблона.

1
24.03.2020, 18:47

Теги

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