Вырезание определенной строки от более длинной строки

У меня есть строки:

fvvDataFolders/DDB/DDB2018-02-21oM]
fbbDataFolders/DDB/DDB2018-02-22oM]

Я хочу разделить все, что запускается с Данных и заканчивается в том, что похоже на дату:

DataFolders/DDB/DDB2018-02-21
DataFolders/DDC/DDB2018-02-22

Как я могу сделать это?

3
задан 25 February 2018 в 17:09

2 ответа

Также

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
4
ответ дан 1 December 2019 в 13:15

Можно использовать команду 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).
  • regexp '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 к тому, что находится в скобках.
4
ответ дан 1 December 2019 в 13:15

Другие вопросы по тегам:

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