Tenho o seguinte arquivo do qual quero extrair apenas Removed '2022-01-30_01-00-05'
, no final.
Removing '2022-01-30_01-00-05'...
0.46% complete (00:03:45 remaining)^M 5.49% complete (00:00:17 remaining)^M 24.90% complete (00:00:06 remaining)^M 60.56% complete (00:00:01 remaining)^M 82.12% complete (00:00:00 remaining)^M 82.39% complete (00:00:01 remaining)^M 84.24% complete (00:00:01 remaining)^M 86.48% complete (00:00:01 remaining)^M 88.58% complete (00:00:01 remaining)^M 89.66% complete (00:00:01 remaining)^M101.08% complete (00:00:00 remaining)^M104.62% complete (00:00:00 remaining)^M ^MRemoved '2022-01-30_01-00-05'
Já tentei dos2unix
mas não funcionou.
Eu tentei essas variações, abaixo, mas quando eu less output
ou elas não removem os ^M
caracteres, ou toda a linha é capturada:
tr -d $'\r' < /file | grep "Removed" > output
tr -d '^M' < /file | grep "Removed" > output
tr -d ^M < /file | grep "Removed" > output
sed 's/\r//g' < /file | grep "Removed" > output
O
grep
comando imprimirá toda a linha correspondente e, como as linhas em *nix são definidas por\n
e não\r
, o que você descreve é um comportamento normal. Em outras palavras, seu primeiro e último comandos (otr -d '\r'
e osed 's/\r//g'
) estão funcionando conforme o esperado, é apenas que o grep está fazendo o que deveria fazer e imprimindo a linha inteira.Para imprimir apenas parte de uma linha, você precisa do GNU
grep
e sua-o
opção. Por exemplo:Como alternativa, altere
\r
(o^M
) para caracteres de nova linha em vez de excluí-los:Ou
dos2unix
remove control-Ms (\r
) imediatamente antes do final das linhas (\n
) - não é isso que você tem, você tem control-Ms em vez do final das linhas. Daídos2unix
não te ajudar.Com GNU awk para multi-chars RS e usando qualquer sequência de
\r
s e/ou\n
s como separadores de registros:resultado
Seu arquivo de entrada tem quebras de linha do Mac. Você pode convertê-los em quebras de linha Unix com
ou
Para descobrir qual tipo de quebra de linha seu arquivo possui, você pode usar este comando: