ls $(awk '{print $3}' /path/to/your/file)
verifique se isso funciona como esperado e, em seguida, substitua ls
por rm
Vamos supor que eu já tenha um arquivo criado. Esta criação de arquivo vem da execução de um comando. O conteúdo do arquivo será de até 4 linhas diferentes com algo parecido com isto:
LUN Path: servernam:/vol/server_xx_t1_01_223_04/mssql01/server_StorageSystemLevel100.lun
LUN Path: servernam:/vol/server_xx_t1_01_225_04/mssql01/server_StorageSystemLevel100.lun
LUN Path: servernam:/vol/server_xx_t1_01_226_04/mssql01/server_StorageSystemLevel100.lun
LUN Path: servernam:/vol/server_xx_t1_01_228_04/mssql01/server_StorageSystemLevel100.lun
Como posso canalizar / awk / qualquer que seja esse arquivo para que eu possa obter a segunda string, ou seja, "servernam: / vol / serverxxxx", e, em seguida, execute um comando como:
rm servernam:/vol/server_xx_t1_01_228_04/mssql01/server_StorageSystemLevel100.lun
Por isso, quero extrair a string correta do arquivo e incluí-la como um argumento para um comando. Note que eu precisaria fazer o mesmo comando de execução em todas as 4 strings diferentes. Um exemplo de script, ou melhor ainda, tudo da linha de comando, seria muito apreciado.
ls $(awk '{print $3}' /path/to/your/file)
verifique se isso funciona como esperado e, em seguida, substitua ls
por rm
echo rm $(sed -n -e 's/[^A-Za-z0-9]/\&/g' -e 's/LUN Path: *//p')
O primeiro comando s
adiciona uma barra invertida antes de cada caractere que não seja uma nova linha, uma letra ou um dígito. O segundo comando retira o prefixo LUN Path:
das linhas que o contêm e imprime somente as linhas que possuem o prefixo. A string resultante sofre expansão de nome de arquivo e divisão de palavras no shell; uma vez que todos os caracteres problemáticos, exceto as novas linhas foram escapados, os nomes dos arquivos apropriados serão passados para o comando.
cut -d: -f3 file | xargs rm
O comando cut
selecionará o terceiro campo :
-delimited do arquivo (o nome do arquivo após servernam:
), enquanto o comando xargs
lerá esses caminhos delimitados por novas linhas e os alimentará em rm
.
Se você quiser que servernam:
faça parte do caminho real, substitua o comando cut
por awk '{ print $NF }'
, que extrairá o último campo delimitado por espaço em branco em cada linha.
Isso usando cut
assume que não há :
nos nomes de caminho, e usar awk
assume que os caminhos não contêm espaços em branco.