Эту оптимизацию выполняет не bash, а GNU tar. Он распознает, когда его вывод равен / dev / null
, и не читает содержимое файлов.
Либо сделайте так, чтобы вывод не был / dev / null
:
tar -cf - /mydirectory > /dev/zero
, либо используйте другой инструмент, например
find . | cpio -o >/dev/null
find . -type f -exec cat {} + >/dev/null
Этот sed
скрипт печатает номер строки, соответствующей / ^}; /
в диапазоне строки от / xkb_symbols "dvorak" {/
до следующего / ^}; /
(который будет таким же };
как тот, мы получим строку номер для):
/xkb_symbols "dvorak" {/,/^};/{
/^};/=
}
Если вам нужны номера как начальной, так и конечной строки:
/xkb_symbols "dvorak" {/,/^};/{
/xkb_symbols "dvorak" {/=
/^};/=
}
$ sed -n -f tiny_script.sed /usr/share/X11/xkb/symbols/us
192
248
Альтернативно:
$ sed -n -f - /usr/share/X11/xkb/symbols/us <<END_SED
/xkb_symbols "dvorak" {/,/^};/{
/xkb_symbols "dvorak" {/=
/^};/=
}
END_SED
ИЗМЕНИТЬ : чтобы получить эти два числа в переменной, при условии, что вы используете Bash:
pos=( $( sed -n -f - /usr/share/X11/xkb/symbols/us <<END_SED
/xkb_symbols "dvorak" {/,/^};/{
/xkb_symbols "dvorak" {/=
/^};/=
}
END_SED
) )
echo "start = " ${pos[0]}
echo "end = " ${pos[1]}
Также , Привет! Еще один пользователь Дворжака!
#! /usr/bin/awk -f
/"dvorak"/ {dvorak++};
/{/ && dvorak {b++} ;
/}/ && dvorak {b--} ;
dvorak && b == 0 && NR > 1 {
print NR;
exit
}
$ ./find-dvorak.awk /usr/share/X11/xkb/symbols/us
248
Здесь используется счетчик ( b
), который увеличивается каждый раз, когда он видит открытую фигурную скобку {
и уменьшается всякий раз, когда он видит закрывающую фигурную скобку }
. Он также использует флаговую переменную ( dvorak
), чтобы узнать, находится ли она внутри строфы «dvorak» или нет.
Если b == 0 и номер строки больше единицы, выведите номер строки.
ОШИБКИ : не учитываются закомментированные скобки или скобки, встроенные в строки.
Если вам нужны номера строк открывающих и закрывающих скобок:
#! /usr/bin/awk -f
/"dvorak"/ {dvorak++};
/{/ && dvorak {
b++;
if (!first++) {
print NR
}
} ;
/}/ && dvorak {b--} ;
dvorak && b == 0 && NR > 1 {
print NR;
exit
}
$ ./find-dvorak2.awk /usr/share/X11/xkb/symbols/us
192
248
Вот версия, которая позволяет вам искать любую xkb_symbols
строфу:
#! /usr/bin/awk -f
match($0,"xkb_symbols.*\""search"\"") {found++};
/{/ && found {
b++;
if (!first++) {
print NR
}
} ;
/}/ && found {b--} ;
found && b == 0 && NR > 1 {
print NR;
exit
}
$ ./find-xkb_symbols.awk -v search=dvorak-intl /usr/share/X11/xkb/symbols/us
255
314