Убедите grep производить все строки, не только тех, которые имеют соответствия

@Giles говорит, что это очень зависимо от платформы. Вот один такой пример.

Я выполняю систему CentOS 5.5. Эта система имеет 4 диска и 3ware RAID-контроллер.

В моем случае, lshw -class disk, cat /proc/scsi/scsi и parted --list показывает RAID-контроллер (3ware 9650SE-4LP). Это не показывает фактические дисковые емкости:

только показывает 3ware RAID-контроллер, который обеспечивает/dev/sda объем:

# lshw -class disk
  *-disk                  
       description: SCSI Disk
       product: 9650SE-4LP DISK
       vendor: AMCC
       physical id: 0.0.0
       bus info: scsi@0:0.0.0
       logical name: /dev/sda

# cat /proc/scsi/scsi 
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: AMCC     Model: 9650SE-4LP DISK  Rev: 4.06
  Type:   Direct-Access                    ANSI SCSI revision: 05

# parted --list

Model: AMCC 9650SE-4LP DISK (scsi)
Disk /dev/sda: 2000GB

Для наблюдения дисков, которые лежат внизу, я должен был установить tw_cli утилиту от 3ware и спросить сам контроллер.

# tw_cli info c0
...

VPort Status         Unit Size      Type  Phy Encl-Slot    Model
------------------------------------------------------------------------------
p0    OK             u0   931.51 GB SATA  0   -            WDC WD1002FBYS-02A6 
p1    OK             u0   931.51 GB SATA  1   -            WDC WD1002FBYS-02A6 
125
04.02.2018, 19:19
7 ответов
grep --color -E "test|$" yourfile

Что мы делаем, здесь соответствует против $ шаблон и тестовый шаблон, очевидно $ ничего не имеет к colourize поэтому, только тестовый шаблон получает цвет. -E просто включает расширенное соответствие regex.

Можно создать функцию из него легко как это:

highlight () { grep --color -E "$1|$" "${@:1}" ; }
190
27.01.2020, 19:29
  • 1
    Это является чертовски потрясающим! –  gvkv 12.08.2010, 06:09
  • 2
    И как функция: highlight () { grep --color -E "$1|$" $2 ; }. Использование: highlight test yourfile –  Stefan Lasiewski 14.10.2010, 06:48
  • 3
    @StefanLasiewski: "$2" должен также быть заключен в кавычки. –  Paused until further notice. 17.03.2011, 22:04
  • 4
    Лучше мог быть: highlight () { grep --color -E "$1|$" "$@" } который позволяет файлы с пробелом на их имена и несколько файлов. –  Mike DeSimone 24.07.2011, 08:34
  • 5
    @MikeDeSimone - Но это будет также иметь "$1" в файлах. Использовать highlight () { grep --color -E "$1|$" "${@:1}" } –  Chris Down 17.11.2011, 13:48
ack --passthru --color string file

для Ubuntu и Debian, используйте ack-grep вместо ack

ack-grep --passthru --color string file
40
27.01.2020, 19:29
  • 1
    О, это находится вполне, очевидно, в странице справочника; я являюсь слепым. Спасибо протест –  Michael Mrozek♦ 17.08.2010, 23:03
  • 2
    Я могу использовать pkg-конфигурацию для получения флагов, но они не появляются в моем Make-файле. $pkg-config - cflags dbus-glib-1-pthread-I/usr/include/dbus-1.0-I/usr/lib/dbus-1.0/include-I/usr/include/glib-2.0-I/usr/lib/glib-2.0/include $pkg-config - освобождает dbus-glib-1-pthread-L/lib-ldbus-glib-1-ldbus-1-lpthread-lgobject-2.0-lgthread-2.0-lrt-lglib-2.0---------121-------234337----ls-l/var/lib/db2/db2inst1/sqllib/adm/db2syscr, дает мне -r-sr-s--- 1 root db2iadm1 147K Feb 1 23:32 /var/lib/db2/db2inst1/sqllib/adm/db2syscr* ---------121 большое спасибо--------44882----за Ваш ответ. Я уже установил его через виртуальную машину, как объяснено в вышеупомянутом ответе. BTW поле семени mandriva, кажется, более легкая опция. Конечно, попробует его в следующий раз, когда кажется, что $PWD оценен только в первый раз apt-get -t stable install php5-memcached Не работал: php5-memcached : Depends: libmemcached11 but it is not installable E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution). ---------121 спасибо--------138639----, но это не работало на меня. Я отодвинул папку, впоследствии перезапустил gedit, но тем не менее темой является нестандартная, а также используемые плагины являются теми, я имел в прошлый раз, когда я использую rm -f часто на clean цель в Makefiles--------121--------55005----@terdon я использую GNU grep 2.12--------121--------137117----Спасибо за Ваш ответ. Но можно ли сказать что-то больше относительно того, каков тот рекурсивный метод? Я слышу его в 1-й раз, когда кажется, что этот сценарий делает то же самое три раза, я установил его на том же разделе, где я установил его в прошлый раз Эй, я не перерабатывал это, как прошлый раз, Да l этимологически для длинного целого со времени где longs, где 32 бита шириной. l остался и, как гарантируют, останется 32 бита шириной даже в системы где longs более широки (так l больше средства long на практике). Использовать l! если Вы хотите свою систему/компилятор longs--------121--------122412----[root@CentOS-7} # об/мин-ql iptables-services.x86_64/etc/sysconfig/ip6tables/etc/sysconfig/iptables/usr/lib/systemd/system/ip6tables.service/usr/lib/systemd/system/iptables.service/usr/libexec/initscripts/legacy-actions/ip6tables/usr/libexec/initscripts/legacy-actions/ip6tables/panic/usr/libexec/initscripts/legacy-actions/ip6tables/save/usr/libexec/initscripts/legacy-actions/iptables/usr/libexec/initscripts/legacy-actions/iptables/panic/usr/libexec/initscripts/legacy-actions/iptables/save/usr/libexec/iptables/usr/libexec/iptables/ip6tables.init/usr/libexec/iptables/iptables.init---------121--------78156-Удостоверяется, что помнил это в следующий раз, Что Вы имеете в виду? Это не должно печатать никого xs--------121--------101608----шаблон для графика может быть указан явно с --regexp string; ack/ack-grep эквивалент --match string –  Rhubbarb 08.01.2015, 19:46
  • 3
    Моделировать ack --passthru с жемчугом: grep_passthrough () { ! perl -ne "print; \$e ||= /$@/; END{{exit \$e}}"; } –  Lucas Cimon 04.03.2016, 19:58
  • 4
    ack --passthru также работы над потоками! Например, ifconfig | ack --passthru inet –  honkaboy 16.06.2016, 03:10

У меня есть следующая функция, которую я использую для таких вещей:

highlight () {
    perl -pe "s/$1/\e[1;31;43m$&\e[0m/g"
}

Внутренне это выглядит довольно ужасным, это хорошо и просто в использовании, как так:

cat some_file.txt | highlight some_word

или, для немного большего реального примера:

tail -f console.log | highlight ERROR

Можно изменить цвета на что-либо, что Вы любите (который мог бы быть твердым с grep - я не уверен) путем изменения 1 и 31 и 43 (после того, как \e[) к различным значениям. Коды для использования повсеместно, но вот быстрое введение: 1 bolds текст, 31 делает это красным, и 43 дает желтый фон. 32 или 33 были бы различные цвета, и 44 или 45 были бы различные фоны: Вы получаете идею. Можно даже заставить его мигнуть (с a 5) если Вы так склонны.

Это не использует специальных модулей Perl, и Perl почти повсеместен, таким образом, я ожидал бы, что это будет работать примерно где угодно. grep решение очень умно, но - цвет включает grep, не доступно везде. Например, я просто попробовал это решение на ударе выполнения поля Solaris, и другое выполнение ksh и мою локальную машину Mac OS X, работающую zsh. Все работали просто великолепно. Солярис, дросселируемый на grep --color решение, как бы то ни было.

Кроме того, ack является потрясающим, и я рекомендую это любому, кто еще не обнаружил его, но у меня были некоторые проблемы, устанавливающие его на нескольких из многих серверов, я продолжаю работать. (Я забываю почему: Я думаю связанный с модулями Perl, которых это потребовало.)

Так как я не думаю, что когда-либо работал над полем Unix, которое не имело Perl установленным (за исключением встроенных систем типов, маршрутизаторов Linksys, и такой) я скажу, что это - в значительной степени универсально применимое решение.

11
27.01.2020, 19:29

Можно попробовать:

perl -MTERM::ANSIColor -nle '/pattern/ ? print colored($_, 'color') : print' test

Не очень портативный однако, и даже если Perl установлен, Вы, возможно, должны загрузить другой модуль. Кроме того, это окрасит всю строку, не только поисковое слово.

2
27.01.2020, 19:29

Есть гораздо более простой способ сделать это для GNU grep, но я не думаю, что он переносимый (например, BSD grep):

В канале:

cat <файл> | grep --color = always -z

В файле:

grep --color = always -z

Кредит принадлежит Ответ Сайруса здесь .

1
27.01.2020, 19:29

Другой способ сделать это правильно и ] переносимо с grep (помимо использования двух регулярных выражений с чередованием, как в принятом ответе) через нулевой шаблон (и, соответственно, нулевую строку).
Он должен одинаково хорошо работать с обоими переключателями -E и -F , поскольку в соответствии со стандартом :

-E
    Match using extended regular expressions. 
    [...] A null ERE shall match every line.

и

-F
    Match using fixed strings.
    [...] A null string shall match every line.

Так что это просто вопрос запуска

grep -E -e '' -e 'pattern' infile

и соответственно

grep -F -e '' -e 'string' infile
13
27.01.2020, 19:29

Версия sed , работает как с bash , так и с ash .

#highlight
hsed(){
    local pattern="$1"
    shift
    local r=`echo -e '\e'[31m`
    local c=`echo -e '\e'[0m`
    sed "s:${pattern//:/\:}:$r\0$c:g" "$@"
}
0
27.01.2020, 19:29

Теги

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