У меня есть строки:
fvvDataFolders/DDB/DDB2018-02-21oM]
fbbDataFolders/DDB/DDB2018-02-22oM]
Я хочу разделить все, что запускается с Данных и заканчивается в том, что похоже на дату:
DataFolders/DDB/DDB2018-02-21
DataFolders/DDC/DDB2018-02-22
Как я могу сделать это?
Также
grep -P -o 'Data.+?\d\d\d\d-\d\d-\d\d'
или
perl -pe 's/^.+(Data.+?\d\d\d\d-\d\d-\d\d).+$/$1/'
сделаю. Они оба печатают минимальную строку, которая запускается с Data
и концы в том, что похоже на дату (YYYY-MM-DD).
echo "fvvDataFolders/DDB/DDB2018-02-21oM]" > input.txt
echo "fbbDataFolders/DDB/DDB2018-02-22oM]" >> input.txt
grep -P -o 'Data.+?\d\d\d\d-\d\d-\d\d' input.txt
# output:
DataFolders/DDB/DDB2018-02-21
DataFolders/DDB/DDB2018-02-22
perl -pe 's/^.+(Data.+?\d\d\d\d-\d\d-\d\d).+$/$1/' input.txt
# output:
DataFolders/DDB/DDB2018-02-21
DataFolders/DDB/DDB2018-02-22
Можно использовать команду grep
таким образом:
grep -oP 'Data.*[0-9]{4}-[0-9]{2}-[0-9]{2}' input-file > output-file
-o
, --only-matching
- покажите только часть ШАБЛОНА соответствия строки.-P
, --perl-regexp
- ШАБЛОН является регулярным выражением Perl; или в этом случае мог использоваться также опция -E
, --extended-regexp
- ШАБЛОН является расширенным регулярным выражением (ERE).'Data.*[0-9]{4}-[0-9]{2}-[0-9]{2}'
соответствия к Вашим требованиям. Это начинается со строки Data
, сопровождаемый неизвестным числом *
из любых символов .
, и концы с форматом даты: 4 digits from 0 to 9
тире 2 digits from 0 to 9
тире 2 digits from 0 to 9
.Вот также a sed
решение:
sed -r 's/^.*(Data.*[0-9]{4}-[0-9]{2}-[0-9]{2}).*$/\1/' /tmp/input-file
> output-file
или используйте опцию -i.bak
внести изменения в их местах и создать файл резервной копии.-r
, --regexp-extended
- используйте расширенные регулярные выражения в сценарии.s
замена средств: /<string-or-regexp>/<replacement>/
.^.*
будет соответствовать к началу ^
из строки, сопровождаемой неизвестным количеством любых символов..*$
будет соответствовать в конец $
из строки предшествуйте неизвестным количеством любых символов.(...)
, будет рассматриваться как переменные \1. Так целая строка ^.*$
будет заменен частью, что matces к тому, что находится в скобках.