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 Data
e 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 grep
desta 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 stringData
, seguida por um número desconhecido*
de quaisquer caracteres.
, e termina com o formato da data:4 digits from 0 to 9
traço2 digits from 0 to 9
traço2 digits from 0 to 9
.
Aqui também está uma sed
soluçã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-file
ou use a opção-i.bak
de 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
s
significa 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.