我需要一個大的文件,用線如:sed的風格替換隨機字母,數字字母隨機數字
member: cn=user0001,ou=people
替換所有的用戶名,使得他們仍然有字母相同位置和數字在同一位置,隨機。所以輸出可能類似於:
member: cn=kvud7405,ou=people
用戶名的長度和格式不同,但它們總是以cn =和逗號爲界。
任何人都可以提供sed/awk/bash的解決方案,或者失敗的python可能是一個選項(不知道哪個版本)。
在此先感謝。
我需要一個大的文件,用線如:sed的風格替換隨機字母,數字字母隨機數字
member: cn=user0001,ou=people
替換所有的用戶名,使得他們仍然有字母相同位置和數字在同一位置,隨機。所以輸出可能類似於:
member: cn=kvud7405,ou=people
用戶名的長度和格式不同,但它們總是以cn =和逗號爲界。
任何人都可以提供sed/awk/bash的解決方案,或者失敗的python可能是一個選項(不知道哪個版本)。
在此先感謝。
awk -F 'cn=|,' 'BEGIN {srand(); OFS = ""} {n = split($2, a, ""); for (i = 1; i <= n; i++) {if (a[i] ~ /[[:digit:]]/) {new = new int(rand() * 10)} else {new = new sprintf("%c", int(rand() * 26 + 97))}}; $2 = "cn=" new ","; print}'
多條線路上爆發了:
awk -F 'cn=|,' '
BEGIN {
srand();
OFS = ""
}
{
n = split($2, a, "");
for (i = 1; i <= n; i++) {
if (a[i] ~ /[[:digit:]]/) {
new = new int(rand() * 10)
}
else {
new = new sprintf("%c", int(rand() * 26 + 97))
}
};
$2 = "cn=" new ",";
print
}'
它可以很容易地被修改,如果需要處理大寫字母字符。
編輯:
更強大:
awk 'BEGIN {srand()} {match($0, /cn=[^,]*,/); n = split(substr($0, RSTART+3, RLENGTH-4), a, ""); for (i = 1; i <= n; i++) {if (a[i] ~ /[[:digit:]]/) {new = new int(rand() * 10)} else {new = new sprintf("%c", int(rand() * 26 + 97))}}; print substr($0, 1, RSTART+2) new substr($0, RSTART+RLENGTH-1)}'
此版本不使用FS
所以它工作時有額外的字段。
像
sed -i 's/blah/blah?$(cat /dev/urandom | tr -dc "a-z0-9" | fold -w 6 | head -n 1)/g' /home/test.html
這是好的,但它似乎更清潔做'開發/ urandom的TR-CD A-Z0-9 | dd bs = 6 count = 1' –
一個bash的解決方案:
letter=(a b c d e f g h i j k l m n o p q r s t u v w x y z)
digit=(0 1 2 3 4 5 6 7 8 9 0)
while read line; do
user=''
line=${line#*=} # separate cn-value
line=${line%,*} # separate cn-value
for ((CNTR=0; CNTR<${#line}; CNTR+=1)); do
if [[ ${line:CNTR:1} =~ [[:alpha:]] ]] ; then
user=$user${letter[RANDOM%26]}
else
user=$user${digit[RANDOM%10]}
fi
done
echo "member: cn=${user},ou=people"
done < "$infile" > "$tempfile"
mv "$tempfile" "$infile" # replace original file
謝謝。這看起來不錯,但稍微移動了球門柱......我有這樣的一些線條: – rich
成員:cn = kvud7405,ou = people,dc = uk – rich
@rich:是的,我對這個版本感覺不太好它不是很健壯。看我的編輯應該更好的版本。 –