Использование подмножества в sed для замены регулярным выражением

find. -type f -exec grep -I -q. {} \; -print

Это найдет все обычные файлы(-type f)в текущем каталоге (или ниже ), которые grepсчитают не -пустыми и не -двоичными.

Он использует grep -I, чтобы различать двоичные и не -двоичные файлы. Флаг -Iи приведет к выходу grepс нулевым статусом выхода, отличным от -, когда он обнаружит, что файл является двоичным. Согласно grep«двоичный» файл — это файл, содержащий символы за пределами печатаемого диапазона ASCII.

Параметр -qдля grepприведет к выходу с нулевым статусом выхода, если заданный шаблон будет найден, без отправки каких-либо данных. Шаблон, который мы используем, представляет собой одну точку, которая будет соответствовать любому символу.

Если файл не является -двоичным и содержит хотя бы один символ, печатается имя файла.

Если вы чувствуете себя смелым, вы также можете подключить к нему свой flip -u:

find. -type f -exec grep -I -q. {} \; -print -exec flip -u {} \;
2
26.08.2019, 18:38
1 ответ

Как упомянул @steeldriver, вам нужно будет сбежать от ()вот так:

sed 's/"\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\) \([0-9][0-9]:[0-9][0-9]:[0-9][0-9]\)"/"\1T\2+01"/g' test.csv > testnew.csv

Или используйте расширенное регулярное выражение с -E или -r в зависимости от вашей версии sed. Что также дает нам преимущество в том, что мы можем немного подчистить группы, не делая частокол :

.
sed -E 's/"([0-9]{4}-[0-9]{2}-[0-9]{2}) ([0-9]{2}:[0-9]{2}:[0-9]{2})"/"\1T\2+01"/g' test.csv > testnew.csv

Я добавил '\2+01' в замену для обоих из них, так как кажется, что это необходимо для получения желаемого результата. Если я неправильно понял, вы, вероятно, захотите изменить это

0
27.01.2020, 22:24

Теги

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