Em um arquivo com muitas linhas, quero excluir as linhas que começam com HERE IT IS
.
Como posso fazer isso usando apenas ferramentas de linha de comando?
command-line
text-processing
micgeronimo
fonte
fonte
vim
assim:vim '+g/^HERE IT IS/d' +wq test.txt
;)Respostas:
Tente
sed
:AVISO: É melhor fazer um backup ao usar a
-i
opção desed
:O arquivo original permanecerá como
<file>.bak
e o arquivo modificado permanecerá<file>
.fonte
sed -i 's/^HERE IT IS/HERE IT IS\n/' <file>
sed '/^HERE IT IS/G' file
.Além das respostas
grep
esed
respostas muito boas que você recebeu, aqui estão outras ferramentas que podem fazer a mesma coisa:Algumas maneiras de Perl:
Você pode adicionar a
-i
opção a qualquer um dos exemplos para editar o arquivo no local:g) awk
As versões mais recentes (4.1.1 e posterior) do GNU
awk
(o padrãoawk
no Linux) também podem editar o arquivo no local:Shell (
bash
,zsh
,ksh
, provavelmente outros). Isso é meio bobo, porém, pode ser feito, mas outras ferramentas são melhores.fonte
bash
um me fez LOL)printf "%s\n" "$line"
: citando $ line para preservar espaços em branco e evitando alguns problemas de eco (interpretação de caracteres especiais, etc.). e evita a necessidade de adicionar--
também.IFS=
e-r
, posso muito bem percorrer todo o caminho e torná-la robusta.Eu usaria
grep
para filtrá-los. Por exemplo :Em seguida, mova outfile de volta para infile.
fonte
sed
é definitivamente o caminho a percorrer.Essa ligeira modificação do comando @heemayl forneceu que você exclua a linha, independentemente de o mesmo caso ser usado no padrão ou não, devido ao I na referência do padrão.
Se você tiver vários arquivos em um diretório em que deseja fazer isso, poderá combiná-lo com o achado.
A opção maxdepth significa que isso não ocorrerá novamente nos diretórios.
fonte
Outra opção python:
Onde f é o caminho para o arquivo, entre aspas.
fonte
Grep
(?!HERE IT IS)
asserção lookahead negativa que faz com que o mecanismo regex corresponda a todo o limite inicial de linha ( que geralmente é correspondido por^
) apenas se não for seguido pela stringHERE IT IS
Pitão
Salve o script em um arquivo, diga
script.py
e execute-o através do comando abaixo no terminal.fonte
[print(l, end = "") for l in open(fil).readlines() if not re.match("HERE IT IS", l)]
, mas não é muito mais eficiente questartswith
. Eu me perguntava como[print(l, end = "") for l in open(f).readlines() if not l.startswith("HERE IT IS")]
não produziria a saída em uma lista.Você pode usar o Vim no modo Ex:
g
pesquisa globald
excluirx
salvar e fecharfonte