誰でもこの問題を解決するのに役立ちますか?ファイルが2つあります。
最初に、退職した従業員のIDが含まれています。
employeeid.txt
5678D956
45S87954
56898K78
4D856898
556987F8
23657D87
2番目のファイルは、ユーザー設定を保存するアプリケーションの構成ファイルです。
App.conf
(一部のファイルのみ)
/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"
employeeid.txt
従業員IDが存在する場合は、構成設定をコメントアウトしてApp.conf
新しいファイルとして保存するようにしたいと思います。
#/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"
sedと連携しようとしましたが、何の進展もありませんでした。
答え1
sed
たとえば、次*
のような雇用者IDを?
有効な正規表現文字として解釈できないとします\
。
sed 's:^/export/home/conf\[naa.\('"$(paste -sd '|' employeeid.txt)"'\)\]:#&:' App.conf
雇用者IDが多く、生成された行が長すぎてサポートされているsed
場合-f-
(そうでない場合は、最初にファイルにリダイレクトしてsed
スクリプトを読み取る必要があります):
{
printf '%s' 's:^/export/home/conf\[naa.\(';
paste -sd '|' employeeid.txt;
printf '%s' '\)\]:#&:';
} | tr -d '\n' | sed -f- App.conf
変更を適用するには(結果を表示するのではなくすぐにファイルを変更する)、-i
GNUsed
または-i ''
FreeBSDを追加しますsed
。
答え2
while read employeeid; do
sed --in-place "/$employeeid/s/^/#/" /path/to/App.conf
done < employeeid.txt
答え3
愚かな(GNU awk)方法:
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
今newfile
必要な行を含めてください。
a[$1]
- 配列を蓄積従業員ID(インデックスとして)最初のファイルがemployeeid.txt
処理されたとき
FS="/"
- 2番目のファイルのフィールド区切り記号App.conf
match($4, /\[naa\.([0-9A-Z]+)\]/, b)
- 1つをキャプチャ従業員ID内部に42 番目のファイル行の 2 番目のフィールド
if(b[1] in a) $1="#"$1
- キャプチャされたことを確認従業員ID内部に批判的大量に。その場合は#
、最初のフィールド(つまり行の先頭)に追加してください。