Você pode fazer algo como
sed '/^\$*$/d' filename
Amostra
$ cat filename
H XXXXXXXXXXXXXXXXXX ""$SEQ_NO $
$
D^I001000456108^IU$
$ sed '/^\$*$/d' filename
H XXXXXXXXXXXXXXXXXX ""$SEQ_NO $
D^I001000456108^IU$
Como remover uma linha específica que contém apenas caracteres de fim de linha no Unix.
O conteúdo do arquivo é o seguinte,
H XXXXXXXXXXXXXXXXXX ""$SEQ_NO $
$
D^I001000456108^IU$
Deveria ser,
H XXXXXXXXXXXXXXXXXX ""$SEQ_NO $
D^I001000456108^IU$
Você pode usar sed(1)
para excluir todas as linhas que consistem apenas em CRs:
cat your_file.txt | sed -e '/^$/d'
grep -vx '\s*\$\s*' file.txt
-x
Selecione apenas as correspondências que correspondem exatamente à linha inteira -v
Inverte o sentido de correspondência para selecionar linhas não correspondentes \s*
zero ou mais caracteres em espaço em branco \$
match $
character Se soubermos que os espaços em branco iniciais e finais não estão presentes nas linhas em questão:
grep -vx '\$' file.txt
Isso é apenas:
grep . < file.in > file.out
grep .
procura por linhas que contenham pelo menos um caractere. Então, são todas as linhas, exceto as vazias ou aquelas que contêm sequências de bytes que não formam nenhum caractere válido.
Com:
LC_ALL=C grep .
Garantiríamos que todas as sequências de bytes formassem caracteres válidos, por isso manteria essas linhas de texto inválidas, se houver. Ou você poderia usar:
grep -vx ''
Outra opção é:
awk length < file.in > file.out
Mais uma vez, você pode encontrar awk
implementações em que length
pode retornar 0 para linhas que contêm apenas caracteres não.
Se você deseja remover linhas que consistem em apenas um caractere $
(seguido pelo caractere de nova linha), então:
grep -vxF '$' < file.in > file.out
Tags linux