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 {} \;
Как упомянул @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' в замену для обоих из них, так как кажется, что это необходимо для получения желаемого результата. Если я неправильно понял, вы, вероятно, захотите изменить это