세 가지 다른 스크램블 값을 생성하는 다음 명령을 작성했습니다.
A=`echo 'abcdefghijklmnopqrstuvwxyz' | sed 's/./&\n/g' | shuf | tr -d "\n"`
B=`echo 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | sed 's/./&\n/g' | shuf | tr -d "\n"`
C=`echo '123456789' | sed 's/./&\n/g' | shuf | tr -d "\n"`
$ echo $A$B$C
zvjmaqwxgchylentifdoprkubsUFTCQEMZKVOLBWYJRPSDHIGXNA729314856
$ echo $C
729314856
$ echo $A$B
zvjmaqwxgchylentifdoprkubsUFTCQEMZKVOLBWYJRPSDHIGXNA
하나는 영숫자, 하나는 숫자, 하나는 문자입니다.
다음 스키마를 가진 package.sql 파일도 있습니다.
grep TRANSLATE package.sql
RETURN TRANSLATE(p1_value,'0123456789', '0875642139');
RETURN TRANSLATE(p2_value,'0123456789', '0875642139');
RETURN TRANSLATE(p3_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz','ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg');
RETURN TRANSLATE(p4_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789','ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg0875642139');
위 출력에서 간단히 참고할 점은 TRANSALTE 행의 첫 번째 부분이 그대로 유지되어야 한다는 것입니다. (즉) () 뒤의 (작은따옴표) 값은 p*_value
정적이므로 변경하면 안 되지만, 정적 값 뒤의 (작은따옴표) 값은 TRANSLATE 행의 모든 항목에서 동적입니다. 매번 얻는 임의의 값을 사용하여 $A$B$C, $A$B 또는 $C의 출력을 사용하여 동적 부분을 변경해야 합니다(예:).
package.sql 파일에서 이 값을 바꿔야 합니다.
답변1
이 값이 실제로 영숫자이고 이러한 문자열이 발생하는 경우모두파일에서 이것을 바꾸면 작동합니다(테스트되지 않음).
sed -i -e "s/0875642139/${C}/;s/ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg/${A}${B}/;s/ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg0875642139/${A}${B}${C}/" package.sql
답변2
grep TRANSLATE p.sql
| sed -E 's_translate\("(.*)","(.*)"\);_"s/\1/\2/"_' \
# e.g. match the line, and create a sed replacement "s/012/210/"
| xargs -I% sed -i -e "%" file
사용해야 할 핵심은 정규식 그룹화라고 생각합니다.
일치하는 항목을 매우 구체적으로 지정한 다음 참조를 통해 출력에 대부분을 포함할 수 있습니다.
sed 's#(common_str[(][keep class 0-9]+",")[replace class]+#\1replacement str#'
sed 's#
(common_str[(][keep class 0-9]+",")[replace class]+
#
\1replacement str
#'`
답변3
다음 방법을 따를 수 있습니다 (bash 쉘)
적절하게 이름이 지정된 변수를 만들고, 변수와 섞인 대응 항목을 생성하는 것부터 시작하세요.
그런 다음 sed 명령을 실행하십시오.
num=`LC_ALL=C printf '%s' {0..9}`
A2Z=`LC_ALL=C printf '%s' {A..Z}`
a2z=`LC_ALL=C printf '%s' {a..z}`
alpha=${A2Z}${a2z}
alnum=${alpha}${num}
num_shuf=`echo "$num" | fold -w 1 | shuf | tr -d "\n"`
alpha_shuf=`echo "$alpha" | fold -w 1 | shuf | tr -d "\n"`
alnum_shuf=`echo "$alnum" | fold -w 1 | shuf | tr -d "\n"`
sed -e "
/TRANSLATE/! b
# numeric
/,'$num',/ s/'[^']*'/,'$num_shuf'/2
# alphabetic
/,'$alpha',/ s/,'[^']*'/,'$alpha_shuf'/2
# alphanumeric
/,'$alnum',/ s/,'[^']*'/,'$alnum_shuf'/2
" input.sql