Cortando determinada corda de uma corda mais longa

Cortando determinada corda de uma corda mais longa

Eu tenho cordas:

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

Quero retirar tudo que começa com Data e termina no que parece ser uma data:

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

Como posso fazer isso?

Responder1

Qualquer

grep -P -o 'Data.+?\d\d\d\d-\d\d-\d\d'

ou

perl -pe 's/^.+(Data.+?\d\d\d\d-\d\d-\d\d).+$/$1/'

vai fazer. Ambos imprimem a string mínima que começa Datae termina com o que parece ser uma data (AAAA-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

Responder2

Você pode usar o comando grepdesta forma:

grep -oP 'Data.*[0-9]{4}-[0-9]{2}-[0-9]{2}' input-file > output-file
  • -o, --only-matching- mostra apenas a parte de uma linha que corresponde ao PATTERN.
  • -P, --perl-regexp- PATTERN é uma expressão regular Perl; ou neste caso poderia ser usada também a opção -E, --extended-regexp- PATTERN é uma expressão regular estendida (ERE).
  • o regexp 'Data.*[0-9]{4}-[0-9]{2}-[0-9]{2}'corresponde aos seus requisitos. Começa com a string Data, seguida por um número desconhecido *de quaisquer caracteres ., e termina com o formato da data: 4 digits from 0 to 9traço 2 digits from 0 to 9traço 2 digits from 0 to 9.

Aqui também está uma sedsolução:

sed -r 's/^.*(Data.*[0-9]{4}-[0-9]{2}-[0-9]{2}).*$/\1/' /tmp/input-file 
  • redirecione a saída para um novo arquivo > output-fileou use a opção -i.bakde fazer as alterações em seus locais e criar um arquivo de backup.
  • -r, --regexp-extended- use expressões regulares estendidas no script.
  • o comando ssignifica substituto: /<string-or-regexp>/<replacement>/.
  • ^.*corresponderá ao início ^da linha, seguido por um número desconhecido de quaisquer caracteres.
  • .*$corresponderá ao final $da linha, precedido por um número desconhecido de quaisquer caracteres.
  • dentro do , o grupo de captura (...), será tratado como a variável \1. Portanto, toda a linha ^.*$será substituída pela parte que corresponde ao que está entre colchetes.

informação relacionada