Форматирование вывода grep при соответствии на нескольких файлах

Приложения альтернативной энергетики

Существует несколько приложений управления питанием, перечисленных на сайте средства поиска Приложения Linux.

     ss of power apps

Из тех перечислил, я использовал GKrellM & PowerTOP. Возможно, один из них удовлетворит Вашим потребностям.

Я сделал беглый взгляд через большинство этих приложений. Я не видел функцию, где потребляемая мощность была сломана устройством. Я полагаю, что функция уникальна для PowerTOP! Не стесняйтесь просматривать список приложений все же. Возможно, я пропустил что-то.

Компиляция последнего PowerTOP (v2.3)

Существует более новая версия PowerTOP, доступного от сайта Открытого исходного кода Intel.

Я попытался бы загрузить это и видел бы, была ли ошибка, на которую ссылаются в Вашем вопросе, разрешена. При просмотре билета Bugzilla это, казалось бы, имело бы место.

Проблемы с вычислением потребляемой мощности в PowerTOP

Это конкретное вычисление требует, чтобы ток измерялся в течение времени. Учитывая это это не обнаруживается ни с какими значимыми значениями сроком на время.

выборка (из ответов Wiki)

Для вычисления потребляемой мощности электрического или электронного устройства, необходимо умножиться, напряжение относилось ко времени устройства использованный ток. Это немного более хитро, чем это сначала появилось бы; примененное напряжение составляет обычно 120 вольт (117 - 125, но кто рассчитывает?) использованный ток немного более сложен. Измерить это требует амперметра (амперметр AC) и немного времени. Текущее потребление не будет постоянным, таким образом, оно должно будет усредняться со временем. Чем дольше Ваше измерение времени, тем более точно Ваше измерение питания будет.

4
18.11.2014, 22:03
9 ответов

grep-T будет работать 7/8ths времени.

% for f in a ab abc abcd abcde abcdef abcdefg abcdefgh; do echo pattern > $f; done
% grep -T pattern *
a      :pattern
ab     :pattern
abc    :pattern
abcd   :pattern
abcde  :pattern
abcdef :pattern
abcdefg:pattern
abcdefgh       :pattern

От GNU grep руководство :

-T - начальная вкладка

Удостоверяется, что первый символ фактического содержания строки находится на позиции табуляции, так, чтобы выравнивание вкладок выглядело нормальным. Это полезно с опциями, которые снабжают префиксом их вывод к фактическому содержанию: -H, -n, и -b. Для улучшения вероятности, что строки из единственного файла будут все запускаться в том же столбце, это также заставляет номер строки и байтовое смещение (если есть) быть распечатанным в ширине поля минимального размера.

7
27.01.2020, 20:45

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

grep ... | sed 's/:/ : /'

только первая : будет дополнена.

Конечно, вы можете сказать GREP только для печати имена файлов:

grep -l ...
6
27.01.2020, 20:45

, Что составляет Word насколько выбор двойным щелчком затронут, терминальное (и/или X инструментариев) иждивенец и для некоторых терминалов, настраиваемый.

Для xterm, символы организованы в , классы (буквы, пробелы...) и двойной щелчок выбирают смежные символы того же класса.

значение по умолчанию описано там . В том значении по умолчанию, : не в том же классе как / самом не в том же классе как буквы или цифры.

Некоторое системное изменение, что значение по умолчанию путем обеспечения файл ресурсов для xterm как /etc/X11/app-defaults/XTerm .

В системе Linux Mint, там, я нахожу:

! Here is a pattern that is useful for double-clicking on a URL:
*charClass: 33:48,35:48,37-38:48,43-47:48,58:48,61:48,63-64:48,95:48,126:48

, Который помещает символы 58 (: ), и 47 в том же классе как буквы и цифры (48).

, Что вы могли сделать, изменить это для отъезда : в его собственном классе через ваш собственный файл ресурсов.

, Например, если вы добавляете:

XTerm*charClass: 33:48,35:48,37-38:48,43-47:48,61:48,63-64:48,95:48,126:48

к вашему ~ / ".Xdefaults-$ (uname-n)" , затем дважды щелкая по имени файла остановится в : .

можно экспериментировать с ним с:

xterm -cc 33:48,35:48,37-38:48,43-47:48,61:48,63-64:48,95:48,126:48

можно также определить другой метод выбора для тройного или четырехкратного щелчка как регулярное выражение. Например

XTerm*on3Clicks: regex [^:]+

выбрал бы последовательности несимволов двоеточия на тройной щелчок .

6
27.01.2020, 20:45

awk работает для меня:

grep string files | awk -F":" {'print $1" : "substr($0,index($0,$2))'}

Просто немного объяснения, если бы это было бы полезно: формат {file}: {match} из многофайла Greep побуждается к awk. AWK сообщает использовать толстую кишку (-F »:«) в качестве разделителя для идентификации полей, а затем происходит следующее переформатирование: распечатайте первое поле (файл), затем напечатайте «:», затем распечатайте все до конца строки Начиная от того, где начинается второе поле (совпадение). Это должно учитывать несколько «:» в матче (спасибо MURU).

1
27.01.2020, 20:45

Я бы передал вывод команды GREP для Perl, как ниже.

grep ... | perl -pe 's/(?<=:)|(?=:)/ /g'

Пример:

$ echo '{FILE}:{MATCH}' | perl -pe 's/(?<=:)|(?=:)/ /g'
{FILE} : {MATCH}

Объяснение:

  • (? <=:) соответствует границе, которая существует после :
  • | или
  • (? =:) Сопоставьте границу, которая существует раньше :
  • Замените все соответствующие границы пространством.
0
27.01.2020, 20:45

Как muru сказали, , sed принимает входные потоки иначе. файлы. Поэтому добавляя -l к grep произведет файлы вместо текста. Передать его по каналу и использовать xargs.

grep -l ... | xargs sed 's/}:{/ : /'

Вам, возможно, понадобилось бы параметр-i . Больше здесь .

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

0
27.01.2020, 20:45

Это неэффективно, По мере того, как это приводит к нересту в новом процессе GREP для каждого входного файла, но:

дано список файлов (например, * ), DO

for f in file_list
do
    grep --label="$f " --with-filename pattern < "$f"
done

- метка = Строка говорит, по сути, «при чтении стандартного ввода, Притворись, что именное имя файла . » - С-файл ( --h для коротких) говорит: «Распечатайте имя файла для каждого матча». Это значение по умолчанию, когда для поиска более одного файла. IMNSHO, он также должен быть по умолчанию, когда вы указываете - этикетка , Но это не так не работает. Поскольку мой код (выше) добавляет пространство в файл в аргументе - этикетка , Вы получаете выход, который выглядит как

filename :Line matching pattern

, если ваши имена файлов появляются из , найдите , сделать

find (path…) (expression) -exec sh -c 'grep --label="$1 " -H pattern < "$1"' sh {} ";"
0
27.01.2020, 20:45

Если вас не волнует скорость, то ищите файлы в цикле. Убедитесь, что grep не показывает имя файла (, скрытое по умолчанию, если указан только один файл ), и добавьте к имени файла sed. Добавьте -s, чтобы отключить предупреждения grep «Является ли каталогом». Я использовал это решение, потому что grep --labelу меня не сработало.

find your_directory | while read f; do
    grep "my_query" "$f" -s | sed "s:^:[$f] :"
done

Выход:
[your_directory/file name] my file contents

0
27.01.2020, 20:45

Я тоже столкнулся с той же проблемой. Как правило, полезно настроить терминал так, чтобы он включал :как часть слова при двойном щелчке, например. для выбора паттернов, таких как 127.0.0.1:5354.

Вывод команды grep является единственным сценарием, который плохо работает с этой конфигурацией.

Хорошим примером может быть https://github.com/kovidgoyal/kitty/issues/2602, где пользователь попросил kitty прекратить включать :по умолчанию, чтобы он лучше работал с grep. Впоследствии это вызвало регрессию в https://github.com/kovidgoyal/kitty/issues/2705, где автору теперь пришлось добавить специальный случай для шаблона URL.

Таким образом,Я думаю, что имеет смысл просто исправить вывод grep (и friends )раз и навсегда. Следующий быстрый -и -грязный diff для grep работает нормально для меня:

--- grep-3.7/src/grep.c.orig
+++ grep-3.7/src/grep.c
@@ -1161,13 +1161,7 @@
     }
 
   if (out_file)
-    {
       print_filename ();
-      if (filename_mask)
-        print_sep (sep);
-      else
-        putchar_errno (0);
-    }
 
   if (out_line)
     {
@@ -1177,8 +1171,19 @@
           totalnl = add_count (totalnl, 1);
           lastnl = lim;
         }
-      print_offset (totalnl, line_num_color);
       print_sep (sep);
+      print_offset (totalnl, line_num_color);
+    }
+
+  if (out_file)
+    {
+      if (filename_mask)
+        {
+          putchar_errno (32);
+          print_sep (sep);
+        }
+      else
+        putchar_errno (0);
     }
 
   if (out_byte)

И, возможно, лучший путь вперед — убедить автора ripgrep добавить для этого флаг:https://github.com/BurntSushi/ripgrep/issues/1718#issuecomment-872896430

0
20.10.2021, 22:51

Теги

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