Измените настройки страны на ja_JP Японский в Puppy Quick Setup, затем перезапустите X.
В настройках страны для Японии Ctrl-пробел
вызовет отображение панели SCIM.
Простой, но не обязательно эффективный:
tac Services.log | awk '/exception/ {L = NR + 4} NR < L' | tac
Следующая команда awk
даст вам строку, содержащую строку exception
вместе с тремя строками «до контекста»(-B 3
с GNU grep
и некоторыми другими grep
реализациями):
awk 'BEGIN { bc=3 } { lines[NR%(bc+1)] = $0 } /exception/ { for (i=1; i<=(bc+1); ++i) print lines[(NR+i)%(bc+1)] }' file
Это сохраняет «круговой буфер», lines
, из bc+1
строк, где bc
— количество строк «до контекста», которое вы хотите. Когда строка соответствует шаблону exception
, печатается содержимое этого буфера.
Это неправильно обрабатывает случай, когда совпадение происходит внутри «до контекста» другого совпадения, или когда первое совпадение в файле встречается менее чем bc
строк в файле.
Обобщается в скрипт, который дает вам настраиваемый объем контекста до и после некоторого шаблона:
#!/bin/sh
# Usage:
# ./script [ -A n ] [ -B n ] PATTERN FILE...
after=0
before=0
while getopts 'A:B:' opt; do
case $opt in
A)
after=$OPTARG
;;
B)
before=$OPTARG
;;
*)
echo 'error in command line parsing' >&2
exit 1
esac
done
shift "$(( OPTIND - 1 ))"
pattern=$1
shift
pattern=$pattern awk -v bc="$before" -v ac="$after" '
{ lines[NR%(bc+1)] = $0 }
$0 ~ ENVIRON["pattern"] {
for (i=1; i<=(bc+1); ++i) print lines[(NR+i)%(bc+1)]
print_after=ac
next
}
print_after > 0 { print; print_after-- }' "$@"
Проверка:
$ cat file
1
2
3
4
5
exception
6
7
8
9
0
exception
$ sh script.sh -B 3 exception file
3
4
5
exception
8
9
0
exception
$ sh script.sh -A 3 exception file
exception
6
7
8
exception
$ sh script.sh -A 1 -B 1 exception file
5
exception
6
0
exception