Каков самый быстрый способ через терминал просматривать мои каталоги и файлы, самые большие первые или самые новые и т. Д.
Вы можете использовать команду find
для отображения файлов с их размерами в удобочитаемом формате:
find / -type f -size +300000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'
отрегулируйте значение + 300000k
.
Предполагая, что SQL использует ;
в качестве разделителей операторов:
$ cat statements.sql
First bit;
Second thing;
More
of the same;
select * from dept where department_name in ('abc'
, 'xyz', 'def') ;
Getting to the end;
The
End;
Тогда вы можете использовать ;
в качестве записи разделитель в awk
и соответствует как обычно:
$ awk 'BEGIN { RS=";" } /department_name in ([^)]+)/ { print $0 ";" }' statements.sql
select * from dept where department_name in ('abc'
, 'xyz', 'def') ;
Шаблон, / имя_отдела в ([^)] +) /
соответствует строке имя_отдела в (
за которым следует один или несколько символов, не являющихся )
(включая символы новой строки), за которыми следует один )
.
Оператор print
добавляет ;
в конец записи, поскольку этот ;
был удален awk
(он удаляет все записи разделители).
Вы получите несколько дополнительных пустых строк, поскольку в файле были пустые строки после предшествующих ;
. Вы можете отфильтровать их с помощью sed -n '/ [[: graph:]] / p'
:
$ awk 'BEGIN {RS=";"} /department_name in ([^)]+)/ { print $0 ";" }' statements.sql |
sed -n '/[[:graph:]]/p'
select * from dept where department_name in ('abc'
, 'xyz', 'def') ;
Надеюсь, это ответ, который вы ищете:
grep -oE 'department_name.*\)' file_name
PS не знаю, как решить эту проблему с помощью awk.
Вы можете использовать awk
и разделитель записей RS
:
$ cat << EOT | awk -v RS="department_name|)" 'NR%2==0'
> select * from dept where department_name in ('abc' ,
> 'xyz',
> 'def') ;
> EOT
in ('abc' ,
'xyz',
'def'
RS
установлен на либо имя_отдела
, либо )
, таким образом запись может состоять из нескольких строк.
Если у вас нет двух одинаковых тегов, NR% 2 = 0
напечатает все, что находится между двумя разными тегами.