Quero encontrar espaços repetidos (mais de um) e substituí-los por um espaço. Eu tentei:
sed -e 's/ []+/ /g' myfile.txt > myfile2.txt
Isso resultou em um arquivo vazio. Por quê? e como atingir meu objetivo?
Neste comando, quero extrair strings como *.com ou *.net, onde * não é um ponto. Eu escrevi isto:
grep -P -E '^[^.]+\.com$ |^[^.]+\.net$' example.csv
Eu recebo este erro:
grep: conflicting matchers specified
Você pode esclarecer?
Preciso extrair (ou contar) as linhas (em um arquivo) que possuem dois ou mais pontos. As linhas não devem começar com um ponto (tudo bem se elas terminarem com um ponto), e não deve haver dois pontos seguidos (ou seja, os pontos são todos separados por caracteres que não sejam pontos).
Exemplo de saída:
a.b.
a.b.com
a.b.c.
a.b.c.com
Mas não:
a.com
a..b
a.b.c..d
Eu fiz este comando:
grep -P '^[^.]+\.([^.]+\.)+[.]+' file.txt | wc -l
mas não encontrou nenhuma linha correspondente. Como devo fazer isso?
Eu tenho um arquivo onde as strings são separadas por uma string especial (não uma vírgula ou delimitador), por exemplo <vvv>
. Eu quero verificar se todas as strings no primeiro campo são únicas. Se forem encontradas linhas duplicadas para o mesmo campo, desejo remover todas as linhas repetidas (deixe a primeira ocorrência).
Exemplo:
aaa<vvv>bbb<vvv>ccc
xxx<vvv>yyy<vvv>zzz
aaa<vvv>new<vvv>new2
111<vvv>222<vvv>333
Eu quero obter:
aaa<vvv>bbb<vvv>ccc
xxx<vvv>yyy<vvv>zzz
111<vvv>222<vvv>333
Removemos aaa<vvv>new<vvv>new2
porque aaa
já apareceu.
Eu não prefiro a nós , a awk
menos que seja a única solução. Sua sintaxe é um pouco complexa para mim como um desconhecido para o Linux.
Se eu tiver um arquivo com algumas palavras começando com letras maiúsculas e algumas começando com letras minúsculas e algumas começando com números ou caracteres especiais. O uso sort -u input > output
converte a letra no arquivo de entrada para minúscula no arquivo de saída?
Por alguma razão, isso parece o que aconteceu comigo. No entanto, se não, preciso de um método para primeiro converter as iniciais de letras maiúsculas se encontradas em pequenas.
Tenho um arquivo no qual uso uma string como <xxxxx>
para separar os campos. Esta foi uma escolha para evitar problemas com os campos separados por vírgulas e outros tipos de caracteres únicos devido à natureza das strings nas colunas que podem conter alguns desses caracteres especiais.
Eu quero extrair a primeira coluna. Eu usei:
cat myfile.txt | cut -d '<xxxxx>' -f1 > out.txt
Mas recebi um erro dizendo que o delimitador deve ser um único caractere. P: Como posso extrair as primeiras colunas (que é antes da primeira ocorrência de <xxxxx>
?
Eu tenho este código de shell que lê linhas de nomes de host do arquivo de entrada, executa um openssl
comando para imprimir informações de certificado ssl e gera os resultados no terminal.
while read x;
do
echo $x;
echo | openssl s_client -servername "$x" -connect "$x":443 -CApath etc/ssl/certs/ca-certificates.crt 2>/dev/null;
done <mylist.txt
Esta é uma saída de exemplo:
example.com
CONNECTED(00000003)
---
Certificate chain
0 s:/CN=*.vhs.ir
i:/CN=*.vhs.ir
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIC8jCCAdqgAwIBAgIFAgK8lFowDQYJKoZIhvcNAQELBQAwEzERMA8GA1UEAwwI
Ki52aHMuaXIwHhcNMTcwMjA5MTIzMDUwWhcNMTgwMjA5MTIzMDUwWjATMREwDwYD
VQQDDAgqLnZocy5pcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANvD
aCQtMdGEPLpLAQGrnEpWjWHxolB71dYVXSBCBVAhjeCCBYtRnZSWFZRpNyskBHFc
eUoGRc5FkZgetujWgBjvQrufug1gyzvcENZkmRcjnjRNDLguzkZDJNjRcm4gik47
1Q1eGD6oF50clDH5XyeLtedk+0buYGS5HvVWX4lNKn1bMWpeqU20paLa8G4eqV4z
vNdE534rl9lYKMltD+y+/h+rhZ0Lq2Na+2P2a37NvOg67kkQbIl/SQticGT9Hvzj
SQx7dnJXnLzt5eEq9I63/VxRcKBSiQLFyMCYBxbaf0Ru3X1Z+xLPpJ5wTpkIEUhe
ik75xD92+aDQeKOu5WECAwEAAaNNMEswHQYDVR0OBBYEFGrN5RNdnvrtYiGAqYz/
gnvfYyEAMB8GA1UdIwQYMBaAFGrN5RNdnvrtYiGAqYz/gnvfYyEAMAkGA1UdEwQC
MAAwDQYJKoZIhvcNAQELBQADggEBAEcJuLhZSDYpM+6icKak26A0oYxxLbSX9yJ2
vfnUWcBdV5AC47KwHbkre0VLcB4N0JmXRuxd9Jx/9RZJ5+wOm/vjmpuhqGUKcGEV
nj1bsHqxAZkJ7WI3GD5ebo2iDwkQLGrJYn+EyoI4vKuLNy8G8RO7wO3i58ieRTvm
c7yYb4zmmppPCSLAG4soXGTpWeMYCN3ogQj2r2AWMK8R5P4rNVqpicIIO758GrNX
8RKVP4zMfaBF4hfwehxFJtTd/SoL70UiIYAyktt6U3S7BN+8uImuJYPdjlyc7XwV
0zzlxW+f8BhPEZ8SV9wb6riT0ViU6LV2/qNmxeFJloyiyVFq2Wk=
-----END CERTIFICATE-----
subject=/CN=*.example.com
issuer=/CN=*.example.com
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 1444 bytes and written 325 bytes
Verification error: certificate has expired
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCM-SHA256
Session-ID: 03FC884879FB1BC4E471721134E9FE75E08C0C36047D9A0C4570FE6EABA77F8C
Session-ID-ctx:
Master-Key: 38EE0A6AE709E2DCD11B5C47C19713B78FE3959B42498699D604940A9B62DD64D3C3E03918BF25FD5CECA7403EAE590E
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 10800 (seconds)
TLS session ticket:
0000 - a4 da 49 66 62 ff aa e7-be bd 76 58 0e d5 fb 45 ..Ifb.....vX...E
0010 - d8 44 c8 2e b1 46 e9 22-6e eb e6 e3 0f eb 8f dc .D...F."n.......
0020 - 8a 57 16 a0 1b 16 36 33-87 2b a3 38 cc 1b 4e c0 .W....63.+.8..N.
0030 - f4 3c 9e d7 82 1d 34 ce-b2 bb 18 95 43 33 74 b7 .<....4.....C3t.
0040 - 24 65 7d 66 94 1e 4f e2-ff 19 e4 71 af bb 51 01 $e}f..O....q..Q.
0050 - f1 fd 55 26 0d 65 39 aa-ef b2 d4 12 84 29 57 96 ..U&.e9......)W.
0060 - 01 2b ae 36 c0 82 f6 e3-4e f9 3e 3b 6d 40 8f ae .+.6....N.>;m@..
0070 - 9a f0 da 95 c2 61 90 42-38 f6 4f 43 78 a5 f4 a5 .....a.B8.OCx...
0080 - 16 27 c8 23 81 fe 98 59-52 87 c1 46 71 3a 34 5d .'.#...YR..Fq:4]
0090 - 6a 1b eb a8 4d 57 19 ea-0b 47 5e 39 8e 07 23 16 j...MW...G^9..#.
00a0 - 34 14 f4 0f 0e 4e 13 55-f8 76 10 64 6c 52 e6 c5 4....N.U.v.dlR..
00b0 - 17 4b 5d 11 89 35 4e ae-97 f1 b7 36 f8 c4 03 56 .K]..5N....6...V
Start Time: 1552057179
Timeout : 7200 (sec)
Verify return code: 10 (certificate has expired)
Extended master secret: no
Eu quero gerar os resultados em um arquivo, cada host ( x
) separado por vírgula, seu resultado de verificação (que é o texto após Verify return code:
).
Tentei adicionar a linha:
| grep "Verify return code:"
após o comando no shell script mas não funcionou.
Como posso fazer o script de shell imprimir a saída como: x,(o que vem depois "Verify return code:"
)?
Exemplo:
example.com,10 (o certificado expirou)
Eu tenho um grande conjunto de arquivos em um diretório. Os arquivos contêm texto arbitrário.
Eu quero procurar o nome do arquivo dentro desse texto de arquivo específico. Para esclarecer, eu tenho file1.py.txt
(sim, dois pontos .py.txt
) e file2.py.txt
ambos contém textos. Eu quero procurar a existência da string @code prefix.file1.py
dentro file1.py.txt
e a string @code prefix.file2.py
dentrofile2.py.txt
Como posso personalizar grep
para que ele passe por todos os arquivos do diretório, pesquise a string em cada arquivo usando esse nome de arquivo específico?
EDITAR:
A saída que estou procurando está escrita em um arquivo separado, result.txt
que contém: nome do arquivo (se uma correspondência for encontrada), o texto da linha (onde a correspondência for encontrada)
Para cada linha no meu arquivo, se a linha terminar com / eu quero removê-la. Como fazer isso? Minha tentativa:
sed -e "s/$\/$//" myfile.txt > myfile_noslash.txt
Não funcionou.
Tenho vários arquivos, com nomes diferentes. nenhum formato específico para eles. Mas todos são .txt
. Por exemplo:
example.txt
flower.txt
abc.com.txt
Eles estão no mesmo diretório. Eu quero procurar uma linha de string em todos os arquivos, por exemplo <html>
. Então, se encontrado, quero extrair a linha onde a string foi encontrada. Então eu quero salvar os resultados da pesquisa em um arquivo results.txt da seguinte forma:
nome do arquivo, linha
Por exemplo, se a string <html>
foi encontrada em example.txt
and abc.com.txt
, o arquivo de resultados será:
example.txt,<html>[the rest of the line where html is found]
abc.com.txt,<html>[the rest of the line where html is found]
Como posso conseguir isso no linux?
Quero verificar a ausência da seguinte sequência de caracteres $$$$$
(ou seja, 5 cifrões) em um json
arquivo usando grep
como foi usado em vez de vírgula para separar campos e preciso ter certeza de que isso não causou conflitos com a sequência semelhante existente.
No entanto, quando eu grep $
, recebo um número semelhante de linhas. Parece que $
é um caractere especial para fim de linha?
Como posso pesquisar $$$$$
usando grep? É $
um caractere especial?
Você pode me indicar onde posso localizar o arquivo de certificados CA no Ubuntu 18.04? Eu tenho um programa que precisa do caminho que aponta para o diretório CAs para certs. validação.
Eu tenho um arquivo CSV que se parece com este formato:
text1,text2,string1,string2
text3,text3,string3,string2
text4,text5,string1,string2
text6,text6,string6,string7
Eu quero extrair linhas quando a coluna1 e a coluna2 não forem iguais. O resultado esperado no exemplo acima seria:
text1,text2,string1,string2
text4,text5,string1,string2
Quando coluna1 e coluna2 não são iguais. Estou familiarizado com comandos que me permitem extrair uma coluna específica como a seguinte para extrair a primeira coluna:
cat input.csv | cut -d ',' -f1 > output.csv
Eu tenho um arquivo (test.txt) que contém string como:
name1,6.5.8.12,specs1,version1,['66.55.89.12']
name2,19.13.13.159,specs2,version2,['13.13.173.59'; '14.19.232.42']
name3,141.101.196.40,specs3,version3,['11.01.196.0']
1) Quero capturar todas as strings nas 2ª e 5ª colunas que são formatadas como quatro números separados por pontos, e cada número pode ter até 3 dígitos.
2) Há uma string na 2ª coluna, mas strings ilimitadas na quinta coluna, mas são separadas por ponto e vírgula.
Tentei usar este comando para tentar capturar todas as strings da quinta coluna (ainda preciso descobrir como capturar a 2ª e a 5ª coluna), mas esse comando não funcionou em primeiro lugar. Produziu arquivo vazio:
cat test.txt | cut -d ',' -f5 | grep -P -o '\d{1-3}\.\d{1-3}\.\d{1-3}\.\d{1-3}' > result.txt
Como capturar a string de formato especial na 2ª e na quinta coluna usng grep
. Onde as strings são quatro números (de 1 a 3 dígitos) separados por pontos. Existe apenas uma string na 2ª coluna, mas strings ilimitadas na 5ª, mas separadas por ponto e vírgula?
EDIT: A saída esperada:
6.5.8.12
66.55.89.12
19.13.13.159
13.13.173.59
14.19.232.42
141.101.196.40
11.01.196.0
Observe também que quero os resultados classificados e exclusivos sort -u
. Não tenho strings repetidas no exemplo, mas quero evitar repetições se encontradas no meu arquivo real.
Eu tenho um arquivo longo que preciso reprocessar para inseri-lo no banco de dados. Os dados do arquivo estão neste formato:
Error for: 111.222.55.1,[ZXX: Error message] some text (_xxx.c:833)
Error for: 198.243.55.25,[ZXX: Error message] some text (_xxx.c:833)
Unexpected error for: 198.245.175.52,[Errno 104] some text here
Eu preciso reorganizar o arquivo para ficar assim:
Error for,111.222.55.1,[ZXX: Error message] some text (_xxx.c:833)
Error for,198.243.55.25,[ZXX: Error message] some text (_xxx.c:833)
Unexpected error for,198.245.175.52,[Errno 104] some text here
1) Observe que há um espaço após a palavra for:
2) Que o caractere :
pode ocorrer mais de uma vez em uma linha como você vê no exemplo. Então eu preciso substituir a primeira ocorrência após ofor:[space]
Pensei sed
em pesquisar e substituir. Mas não sabe como limitar a busca pela vaga que eu quero?
Eu tenho um arquivo com a seguinte entrada. Os números separados por pontos representam endereços. Qualquer número no endereço pode ter um ou mais dígitos da seguinte forma:
[112.112.112.112;3.3.3.3;44.44.44.44]
[6.6.6.6;17.17.17.17;88.88.88.88]
Eu quero extrair cada endereço sem os pontos e vírgulas e colchetes (os endereços são separados por ponto e vírgula ;
), e inserir cada endereço em uma linha em um novo arquivo para produzir esta saída:
112.112.112.112
3.3.3.3
44.44.44.44
6.6.6.6
17.17.17.17
88.88.88.88
Como primeiro passo, tentei grep para extrair os endereços da seguinte forma:
grep -E '\d+\.\d+\.\d+\.\d+' myfile.txt > newfile.txt
Mas não imprime nada.
Eu tenho um arquivo separado por vírgula que se parece com o formato dele:
aa.com,1.21.3.4,string1 string2 K=12 K2=23 K3=45 K4=56
bb.com,5.6.7.8,string1 string2 K=66 K2=77 K3=88 K4=99
Eu quero pegar a terceira coluna que contém strings separadas por espaços. Eu quero processar o arquivo para separar as primeiras duas colunas da terceira coluna por uma vírgula e ignorar o restante das strings na coluna 3. Os dois primeiros campos não contêm espaços. Observe que o número de strings na 3ª coluna não é fixo para todos os registros. Neste exemplo, são 6 strings separadas por 5 espaços. Mas pode ser mais ou menos.
Tudo o que eu preciso é pegar as primeiras duas strings da 3ª coluna, separá-las por uma vírgula e ignorar o restante das strings da coluna 3.
aa.com,1.21.3.4,string1,string2
bb.com,5.6.7.8,string1,string2