Поиск и извлечение немедленных символов

Попробуйте что-нибудь вроде этого:

$ ls  *ext | grep -P '[^)]\.ext' | xargs -iXXxxFILEXXxx mv XXxxFILEXXxx target/

grep отфильтрует файлы со скобками в именах, а xargs выполнит команду mv для результатов. Уродливая метка XXxxFILEXXxx предназначена для размещения имен файлов в качестве аргумента mv.

1
18.04.2018, 20:47
2 ответа

Как насчет следующего:

awk 'BEGIN{FS="cast\\(";OFS="\n\n"}{ for(i = 1; i <= NF; i++) { sub("[ ),].*","",$i);gsub("^.*\\(","",$i) } {$1=""; print}}'

Это решение перебирает экземпляры «cast (» в любой строке, а затем удаляет префиксы и суффиксы.

0
28.01.2020, 00:36

Для поиска field<decimals>вхождений внутри cast(...)операторов, при условии отсутствия несоответствующих скобок, с GNU grepили совместимой сборкой с поддержкой PCRE:

<abc.txt grep -Po 'cast(\((?:[^()]++|(?1))*\))' |
  grep -Po '\bfield\d+\b'

Это использует способность PCRE определять рекурсивные регулярные выражения. Выше (?1)относится к регулярному выражению, заключенному в (...), поэтому мы ищем cast, за которым следует регулярное выражение «R», начинающееся с (, за которым следует любое количество скобок, отличных от -(++. ] — это просто не-версия с возвратом+)или более букв «R», за которыми следует ).

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

Второй grepизвлекает только field<decimal>(, окруженные границами слов(\b))из тех cast(...)утверждений, которые извлекает первый grep.

Это предполагает, что эти операторы SQL находятся в одной строке. Если нет, вы можете добавить опцию -zк первой grep.

0
28.01.2020, 00:36

Теги

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