
Alguém pode me ajudar com isso. Eu tenho 2 arquivos
O primeiro contém IDs de funcionários que deixaram a empresa
employeeid.txt
5678D956
45S87954
56898K78
4D856898
556987F8
23657D87
O segundo arquivo é um arquivo de configuração para um aplicativo que armazena as configurações dos usuários
App.conf
(apenas parte do arquivo)
/export/home/conf[naa.5678D956]/displayName = "John Paul (naa.5678D956)"
/export/home/conf[naa.5678D956]/Scripts = "true"
/export/home/conf[naa.5678D956]/FTP = "true"
/export/home/conf[naa.5678D956]/HomeDirs = "true"
/export/home/conf[naa.4487984D]/displayName = "Cara Jones (naa.4487984D)"
/export/home/conf[naa.4487984D]/Scripts = "false"
/export/home/conf[naa.4487984D]/FTP = "true"
/export/home/conf[naa.4487984D]/HomeDirs = "true"
/export/home/conf[naa.45S87954]/displayName = "Eimer Fenton (naa.45S87954)"
/export/home/conf[naa.45S87954]/Scripts = "true"
/export/home/conf[naa.45S87954]/FTP
/export/home/conf[naa.45S87954]/HomeDirs = "true"
/export/home/conf[naa.56898K78]/displayName = "Edd Waters (naa.56898K78)"
/export/home/conf[naa.56898K78]/Scripts = "true"
/export/home/conf[naa.56898K78]/FTP = "true"
/export/home/conf[naa.56898K78]/HomeDirs = "true"
/export/home/conf[naa.909878S4]/displayName = "Phil Mooney (naa.909878S4)"
/export/home/conf[naa.909878S4]/Scripts
/export/home/conf[naa.909878S4]/FTP = "true"
/export/home/conf[naa.909878S4]/HomeDirs = "true"
Eu gostaria que, se existir um ID de funcionário employeeid.txt
, ele comente sua configuração App.conf
e salve como um novo arquivo
#/export/home/conf[naa.5678D956]/displayName = "John Paul (naa.5678D956)"
#/export/home/conf[naa.5678D956]/Scripts = "true"
#/export/home/conf[naa.5678D956]/FTP = "true"
#/export/home/conf[naa.5678D956]/HomeDirs = "true"
/export/home/conf[naa.4487984D]/displayName = "Cara Jones (naa.4487984D)"
/export/home/conf[naa.4487984D]/Scripts = "false"
/export/home/conf[naa.4487984D]/FTP = "true"
/export/home/conf[naa.4487984D]/HomeDirs = "true"
#/export/home/conf[naa.45S87954]/displayName = "Eimer Fenton (naa.45S87954)"
#/export/home/conf[naa.45S87954]/Scripts = "true"
#/export/home/conf[naa.45S87954]/FTP
#/export/home/conf[naa.45S87954]/HomeDirs = "true"
#/export/home/conf[naa.56898K78]/displayName = "Edd Waters (naa.56898K78)"
#/export/home/conf[naa.56898K78]/Scripts = "true"
#/export/home/conf[naa.56898K78]/FTP = "true"
#/export/home/conf[naa.56898K78]/HomeDirs = "true"
/export/home/conf[naa.909878S4]/displayName = "Phil Mooney (naa.909878S4)"
/export/home/conf[naa.909878S4]/Scripts
/export/home/conf[naa.909878S4]/FTP = "true"
/export/home/conf[naa.909878S4]/HomeDirs = "true"
Tenho tentado fazê-lo funcionar com o sed, mas não consegui chegar a lugar nenhum
Responder1
Supondo que não existam IDs de empregadores que possam ser interpretados como caracteres de expressão regular válidos por sed
, por exemplo *
, ?
ou \
:
sed 's:^/export/home/conf\[naa.\('"$(paste -sd '|' employeeid.txt)"'\)\]:#&:' App.conf
Se você tiver muitos IDs de empregador para que a linha resultante fique muito longa e seu sed
suporte -f-
(caso contrário, você deve primeiro redirecioná-lo para um arquivo e depois sed
ler o script):
{
printf '%s' 's:^/export/home/conf\[naa.\(';
paste -sd '|' employeeid.txt;
printf '%s' '\)\]:#&:';
} | tr -d '\n' | sed -f- App.conf
Para fazer as alterações no local (modificando o arquivo imediatamente em vez de mostrar os resultados) adicione -i
for GNU sed
ou -i ''
for FreeBSD sed
.
Responder2
while read employeeid; do
sed --in-place "/$employeeid/s/^/#/" /path/to/App.conf
done < employeeid.txt
Responder3
ficar boquiaberto(GNU awk) abordagem:
awk 'NR==FNR{a[$1]; next}{match($4, /\[naa\.([0-9A-Z]+)\]/, b);
if(b[1] in a) $1="#"$1;}1' OFS="/" employeeid.txt FS="/" App.conf > newfile
Agora, newfile
contém as linhas necessárias
a[$1]
- acumulando uma série deIDs de funcionários(como índices) enquanto o primeiro arquivo employeeid.txt
é processado
FS="/"
- separador de campo para o segundo arquivoApp.conf
match($4, /\[naa\.([0-9A-Z]+)\]/, b)
- captura umID do Empregadodentro do4o campo da linha de um segundo arquivo
if(b[1] in a) $1="#"$1
- verifica se o capturadoID do Empregadoestá nocrucialvariedade. Se sim, adiciona #
ao primeiro campo(ou seja, no início da linha)