Alguma sugestão? Eu li: Sequências de escape (Guia do usuário GNU Awk)
Exemplo representativo
$ Filesystem='/dev/mapper/vgubuntu-Media'
$ FilesystemRegex="$(echo "${Filesystem}" | sed "s~/~\\\/~g")"
$ echo "$FilesystemRegex"
\/dev\/mapper\/vgubuntu-Media
$ df -H "${Filesystem}" | awk -v Regex="${FilesystemRegex}" '/$Regex/{print $5}'
awk: warning: escape sequence `\/' treated as plain `/'
$ df -H "${Filesystem}" | awk '/\/dev\/mapper\/vgubuntu-Media/{print $5}'
62%
/$Regex/
é uma expressão regular que procuraRegex
após o final do assunto ($
), portanto, obviamente, nunca pode corresponder.Para usar uma
awk
variável como regexp, você não pode usar o/.../
operador que não suporta incorporação de variáveis, você precisa:em vez disso (lembre-se também de que o
$
operador inawk
serve para desreferenciar campos, não para referenciar variáveis como em shells).Para definir essa
awk
variável com base em uma variável shell, não use-v
como-v
mangles barras pretas¹.Em vez disso, use uma variável de ambiente:
Mas aqui, parece que você prefere:
-H
é inútil, pois o 5º campo² é uma porcentagem.Ou para demonstrar o uso do
$
operador:Onde
$
aqui é aplicado às variáveis awk para recuperar os campos correspondentes, o espaço é opcional, você pode usar$fs_field
ou$ ( fs_field )
ou$(fs_field * 1 + 0)
...De qualquer forma,
/
não é especial em uma regexp e não precisa ser escapado. Ele só precisa ser escapado quando aparecer literalmente dentro do/.../
operador, caso contrário seria considerado o fechamento/
desse operador.A implementação GNU
df
que você-H
sugere que você esteja usando também suporta a especificação de quais campos incluir na saída.Então você poderia fazer:
Se estiver em um sistema baseado em Linux, consulte também:
¹ Interpretando e substituindo
\x
sequências de escape, da mesma forma que nas strings de sua própria sintaxe (ou de C). Versões recentes do GNUawk
também alteram strings começando com@/
e/
. Por razões semelhantes, não useecho
² Embora não seja garantido que seja a quinta, pois a primeira coluna pode muito bem conter espaços em branco.
-Você pode fazer assim!
onde $5 é o campo que mostra a% de espaço utilizado do sistema de arquivos, e $6 é o campo que mostra o nome do sistema de arquivos, e $1 é o nome do dispositivo que é verificado! e depois desta última opção o 'grep nvme0n1p4' é apenas o nome do dispositivo que queremos verificar o espaço livre, ok! Tudo isso apenas nos mostra algo como: