comandos sort, uniq, tr e expressões regulares de shell
1. O comando sort (classificar o conteúdo dos arquivos)
1. Visão geral: Classifique o conteúdo dos arquivos em unidades de linhas ou de acordo com diferentes tipos de dados
2. Formato francês:
sort [选项] 参数
cat file | sort 选项
3. Opções comuns
- -f: ignora maiúsculas, letras maiúsculas são classificadas primeiro por padrão
- -b: Ignora os espaços na frente de cada linha
- -n: classificar por número
- -r: classificação reversa
- -u: equivalente a uniq, o que significa que apenas uma linha dos mesmos dados é exibida
- -t: Especifique o separador de campo e use a tecla [tab] para separar por padrão
- -k: especifica o campo de classificação
- -o <arquivo de saída>: despeja os resultados classificados no arquivo especificado
4. Exemplos
-u os mesmos dados exibem apenas uma linha
A desduplicação é executada com base na classificação após a classificação.
-t é geralmente usado com -k
Organize o conteúdo do arquivo / etc / passwd na ordem uid (terceiro campo)
sort -t ":" -k 3 /etc/passwd
Use com du
-b Ignora espaços em cada linha
Dois, comando uniq
== 1. Visão geral: usado para relatar ou ignorar linhas repetidas consecutivas em um arquivo, geralmente combinado com o comando sort ==
2. Formato da sintaxe:
uniq [选项] 参数
cat file | uniq 选项
3. Opções comuns:
- -c: conta e exclui linhas repetitivas no arquivo
- -d: exibe apenas linhas repetidas consecutivas
- -u: exibe apenas as linhas que aparecem uma vez
Continue a usar o símbolo de tubo
Três, comando tr
1. Visão geral: frequentemente usado para substituir, compactar e excluir caracteres da entrada padrão
Formato de sintaxe:
tr [选项] 参数
2. Opções comuns:
- -c: caracteres reservados no conjunto de caracteres 1, outros caracteres (incluindo nova linha \ n) são substituídos pelo conjunto de caracteres 2
- -d: exclui todos os caracteres pertencentes ao conjunto de caracteres 1
- -s: comprime a sequência de caracteres repetitivos em uma sequência de caracteres e substitui o conjunto de caracteres 1 pelo conjunto de caracteres 2
- -t: o conjunto de caracteres 2 substitui o conjunto de caracteres 1, o mesmo resultado sem opções
3. Parâmetros:
Conjunto de caracteres 1:
Especifique o conjunto de caracteres original a ser convertido ou excluído. Ao realizar uma operação de conversão, o parâmetro "Conjunto de caracteres 2" deve ser usado para especificar a operação de conversão e o parâmetro "Conjunto de caracteres 2" deve ser usado para especificar o conjunto de caracteres de destino da conversão. Mas ao executar a operação de exclusão, o parâmetro "conjunto de caracteres 2" não é necessário
Conjunto de caracteres 2:
Especifique o conjunto de caracteres alvo a ser convertido
4. Exemplos
echo abc | tr 'a-z' 'A-Z'
echo abc | tr 'ac' 'AZ'
Uso de -c
-d excluir o conjunto de caracteres 1
echo 'hello world' | tr -d 'od'
-s compacta uma string em uma string ou compacta o conjunto de caracteres 1 em 1 e substitui um conjunto de caracteres pelo conjunto de caracteres 2.
echo "thissss is a text 1 innnnnnne." | tr -s 'sn'
echo "thissss is a text 1 innnnnnne." | tr -s 'sn' 'AB'
删除空行
echo -e "aa\n\n\n\n\nbb" | tr -s "\n"
cat testfile4| tr -s "\n"
把路径变量中的冒号":",替换成换行符"\n"实现每行输出
echo $PATH | tr -s ":" "\n"
以冒号分割
echo -e "aa\n\n\n\n\nbb" | tr -s "\n" ":"
Exclua o caractere "^ M" no arquivo do Windows "De acordo com"
1.第一种方法
cat abc.txt | tr -s "\r" "\n" > new_file
或
cat abc.txt | tr -d "\r" > new_file
cat -v abc.txt
2.第二种方法
yum install -y dos2unix
dos2unix abc.txt
Ao encontrar um caractere de nova linha ("\ n") no Linux, a operação de retorno de carro + alimentação de linha será realizada. Em vez disso, o caractere de retorno de carro será exibido apenas como um caractere de controle ("^ M"), e a operação de retorno de carro não irá ocorrer. No Windows, somente retorno de carro + avanço de linha ("\ r \ n") pode ser usado para retorno de carro + avanço de linha. Se um caractere de controle estiver faltando ou a ordem não estiver correta, uma nova linha não pode ser iniciada corretamente.
Array sort
Se o algoritmo for mais complicado, usar sort e tr combinados com o símbolo de barra vertical será mais simples
arr=(3 5 6 2 1 7)
echo ${arr[@]} | tr " " "\n" | sort -n | tr "\n" " "
Quatro, comando de corte
1. Visão geral do corte
Exibir a parte especificada na linha, excluir o campo especificado no arquivo
2. Formato da sintaxe:
cut 选项参数
cat file | cut 选项
2. Opções comuns
- -f: Extraia especificando qual campo. O comando cut usa "tab" como separador de campo padrão
- -d: "TAB" é o separador padrão, use esta opção para mudar para outros separadores
- --Complemento: esta opção é usada para excluir o campo especificado
- --Delimitador de saída: altera o delimitador do conteúdo de saída
cut -d ':'-f 1 /etc/passwd
grep '/bin/bash' /etc/passwd | cut -d ':' -f 1-4,6,7 #以,分隔的开始字段和结束字段指定字段的范围(显示1-4字段和第6第7字段)
grep '/bin/bash' /etc/passwd | cut -d ':' --complement -f 2 #排除第二个字段
cut -d ':' -f1,7 --output-delimiter=' ' /etc/passwd #输出分隔符使用空格分隔
Cinco, expressões regulares
Geralmente é usado em sentenças de julgamento para verificar se uma string satisfaz um determinado formato.
As expressões regulares são compostas de caracteres comuns e metacaracteres.
Os caracteres comuns incluem letras maiúsculas e minúsculas, números, sinais de pontuação e alguns outros símbolos
. Metacaracteres se referem a caracteres especiais com significado especial em expressões regulares, que pode ser usado para especificar o modo de aparência de seu caractere principal (ou seja, o caractere antes do metacaractere) no objeto de destino
1. Metacaracteres comuns de expressões regulares básicas (ferramentas suportadas: grep, egrep, sed, awk)
\ :转义字符,用于取消特殊符号的含义,例: \!、\n、\$等
^ :匹配字符串开始的位置,例: ^a、 ^the、 ^#、^[a-z]
$ :匹配字符串结束的位置,例: word$、 ^$匹配空行
. :匹配除\n之外的任意的一个字符,例: go.d、 g..d
* :匹配前面子表达式0次或者多次,例: goo*d、 go.*d
[list] :匹配list列表中的一个字符,例: go[ola]d, [abc]、 [a-z]、 [a-z0-9]、 [0-9]匹配任意一位数字
[^list] :匹配任意非list列表中的一个字符,例: [^0-9]、 [^A-20-9]、 [^a-z]匹配任意一位非小写字母
\{
n\} :匹配前面的子表达式n次,例: go\{
2\}d、 '[0-9]\{2\} '匹配两位数字
\{
n,\} :匹配前而的子表达式不少于n次,例: go\{
2, \}d、'[0-9]\{2, \}'匹配两位及两位以上数字
\{
n,m\} :匹配前面的子表达式n到m次,例: go\{
2,3\}d、 ' [0-9]\{2,3\}'匹配两位到三位数字
注: egrep、 awk使用{
n}、{
n,小、{
n, m}匹配时“{
}”前不用加“\”
2. Metacaracteres de expressão regular estendida (ferramentas compatíveis: egrep, awk)
+ :匹配前面子表达式1次以上,例: go+d, 将匹配至少一个o, 如god、 good、 goood等
? :匹配前面子表达式0次或者1次,例: go?d, 将匹配gd或god
() :将括号中的字符串作为一个整体,例1: g(oo)+d," 将匹配oo整体1次以上,如good、gooood等
| :以或的方式匹配字条串,例: g (oo|la)d," 将匹配good或者glad
3. Exemplo de correspondência de endereço de e-mail
O nome de usuário requer o início de uma letra e até 2 símbolos podem ser usados no meio, e o final do símbolo não pode ser usado. O comprimento do nome de usuário é de pelo menos 6 caracteres
@ sohu.com
@qq. com
@ 163.com
@ wo.cn
@ sina.com.cn
nome de usuário @ 子 domínio.domínio de
nível superior O comprimento da string de domínio de nível superior é geralmente de 2 a 5
egrep ^[a-zA-Z0-9]{
1,}[a-zA-Z0-9\.\-]{
4,}[a-zA-Z0-9]@[a-zA-Z0-9_\.\-]+\.([a-zA-Z]{
2,5})$
4. Tela de números de telefone
egrep ^[1][3|5][0-9][ ]?[0-9]{
4}[ ]?[0-9]{
4}$ number.txt