Search for a dynamic pattern in a file in a file and replace it with variables
Clash Royale CLAN TAG#URR8PPP
I have written the below commands that will generate three different shuffled vales
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
One is Alpha numeric, one is numbers and one is alphabets.
I also have a package.sql file which has below patterns.
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');
A brief about the above output is, First Part of TRANSALTE lines should remain as it is. (i.e) value in (single quotes)after p*_value
will be static and it shouldn't be changed, whereas the value in (Single Quotes) after that static value will be dynamic in all the occurences of that TRANSLATE line. I need to change that dynamic part with the Shuffled values I get every time (i.e) with the output of $A$B$C or $A$B or $C.
That values needs to replaced in that package.sql file.
text-processing awk sed sql
add a comment |
I have written the below commands that will generate three different shuffled vales
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
One is Alpha numeric, one is numbers and one is alphabets.
I also have a package.sql file which has below patterns.
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');
A brief about the above output is, First Part of TRANSALTE lines should remain as it is. (i.e) value in (single quotes)after p*_value
will be static and it shouldn't be changed, whereas the value in (Single Quotes) after that static value will be dynamic in all the occurences of that TRANSLATE line. I need to change that dynamic part with the Shuffled values I get every time (i.e) with the output of $A$B$C or $A$B or $C.
That values needs to replaced in that package.sql file.
text-processing awk sed sql
add a comment |
I have written the below commands that will generate three different shuffled vales
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
One is Alpha numeric, one is numbers and one is alphabets.
I also have a package.sql file which has below patterns.
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');
A brief about the above output is, First Part of TRANSALTE lines should remain as it is. (i.e) value in (single quotes)after p*_value
will be static and it shouldn't be changed, whereas the value in (Single Quotes) after that static value will be dynamic in all the occurences of that TRANSLATE line. I need to change that dynamic part with the Shuffled values I get every time (i.e) with the output of $A$B$C or $A$B or $C.
That values needs to replaced in that package.sql file.
text-processing awk sed sql
I have written the below commands that will generate three different shuffled vales
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
One is Alpha numeric, one is numbers and one is alphabets.
I also have a package.sql file which has below patterns.
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');
A brief about the above output is, First Part of TRANSALTE lines should remain as it is. (i.e) value in (single quotes)after p*_value
will be static and it shouldn't be changed, whereas the value in (Single Quotes) after that static value will be dynamic in all the occurences of that TRANSLATE line. I need to change that dynamic part with the Shuffled values I get every time (i.e) with the output of $A$B$C or $A$B or $C.
That values needs to replaced in that package.sql file.
text-processing awk sed sql
text-processing awk sed sql
edited Feb 23 at 10:29
Jeff Schaller
43.8k1161141
43.8k1161141
asked Feb 23 at 5:01
sabarish jacksonsabarish jackson
144212
144212
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
If and only if the values are actually alphanumeric and the occurrences of these strings should all be replaced in the file this should work (untested):
sed -i -e "s/0875642139/$C/;s/ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg/$A$B/;s/ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg0875642139/$A$B$C/" package.sql
May be possible first part is not static.
– Prvt_Yadv
Feb 23 at 5:45
Please update your question to include this. It makes a big difference to the implementation if you mean what I think you mean.
– l0b0
Feb 23 at 5:47
It's not my question just a comment that it is unclear.
– Prvt_Yadv
Feb 23 at 5:54
@10b0 The command which you have given will work if those values are static, But assume, we have changed it now with shuffled values using your SED command. for the next execution the values wont be same right? So It will fail for the second execution,
– sabarish jackson
Feb 23 at 5:59
@PRY First Part of Alphanumricals or whatever is static (i.e) value after p*_value will be static and value in (Single Quotes) after that static value will be dynamic. in the below patterns. RETURN TRANSLATE(p1_value,'0123456789', '0875642139'); RETURN TRANSLATE(p2_value,'0123456789', '0875642139'); RETURN TRANSLATE(p3_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz','ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg'); RETURN TRANSLATE(p4_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678
– sabarish jackson
Feb 23 at 6:04
|
show 5 more comments
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
I think the key thing you need to use is regex grouping.
You can be very specific about what you match, and then include most of it in the output by reference.
sed 's#(common_str[(][keep class 0-9]+",")[replace class]+#1replacement str#'
sed 's#
(common_str[(][keep class 0-9]+",")[replace class]+
#
1replacement str
#'`
add a comment |
You may follow the approach (bash shell)
First create appropriately named variables, generated variables, and their shuffled counterparts.
Then run the sed command.
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
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f502453%2fsearch-for-a-dynamic-pattern-in-a-file-in-a-file-and-replace-it-with-variables%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
If and only if the values are actually alphanumeric and the occurrences of these strings should all be replaced in the file this should work (untested):
sed -i -e "s/0875642139/$C/;s/ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg/$A$B/;s/ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg0875642139/$A$B$C/" package.sql
May be possible first part is not static.
– Prvt_Yadv
Feb 23 at 5:45
Please update your question to include this. It makes a big difference to the implementation if you mean what I think you mean.
– l0b0
Feb 23 at 5:47
It's not my question just a comment that it is unclear.
– Prvt_Yadv
Feb 23 at 5:54
@10b0 The command which you have given will work if those values are static, But assume, we have changed it now with shuffled values using your SED command. for the next execution the values wont be same right? So It will fail for the second execution,
– sabarish jackson
Feb 23 at 5:59
@PRY First Part of Alphanumricals or whatever is static (i.e) value after p*_value will be static and value in (Single Quotes) after that static value will be dynamic. in the below patterns. RETURN TRANSLATE(p1_value,'0123456789', '0875642139'); RETURN TRANSLATE(p2_value,'0123456789', '0875642139'); RETURN TRANSLATE(p3_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz','ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg'); RETURN TRANSLATE(p4_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678
– sabarish jackson
Feb 23 at 6:04
|
show 5 more comments
If and only if the values are actually alphanumeric and the occurrences of these strings should all be replaced in the file this should work (untested):
sed -i -e "s/0875642139/$C/;s/ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg/$A$B/;s/ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg0875642139/$A$B$C/" package.sql
May be possible first part is not static.
– Prvt_Yadv
Feb 23 at 5:45
Please update your question to include this. It makes a big difference to the implementation if you mean what I think you mean.
– l0b0
Feb 23 at 5:47
It's not my question just a comment that it is unclear.
– Prvt_Yadv
Feb 23 at 5:54
@10b0 The command which you have given will work if those values are static, But assume, we have changed it now with shuffled values using your SED command. for the next execution the values wont be same right? So It will fail for the second execution,
– sabarish jackson
Feb 23 at 5:59
@PRY First Part of Alphanumricals or whatever is static (i.e) value after p*_value will be static and value in (Single Quotes) after that static value will be dynamic. in the below patterns. RETURN TRANSLATE(p1_value,'0123456789', '0875642139'); RETURN TRANSLATE(p2_value,'0123456789', '0875642139'); RETURN TRANSLATE(p3_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz','ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg'); RETURN TRANSLATE(p4_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678
– sabarish jackson
Feb 23 at 6:04
|
show 5 more comments
If and only if the values are actually alphanumeric and the occurrences of these strings should all be replaced in the file this should work (untested):
sed -i -e "s/0875642139/$C/;s/ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg/$A$B/;s/ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg0875642139/$A$B$C/" package.sql
If and only if the values are actually alphanumeric and the occurrences of these strings should all be replaced in the file this should work (untested):
sed -i -e "s/0875642139/$C/;s/ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg/$A$B/;s/ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg0875642139/$A$B$C/" package.sql
answered Feb 23 at 5:42
l0b0l0b0
28.6k19121248
28.6k19121248
May be possible first part is not static.
– Prvt_Yadv
Feb 23 at 5:45
Please update your question to include this. It makes a big difference to the implementation if you mean what I think you mean.
– l0b0
Feb 23 at 5:47
It's not my question just a comment that it is unclear.
– Prvt_Yadv
Feb 23 at 5:54
@10b0 The command which you have given will work if those values are static, But assume, we have changed it now with shuffled values using your SED command. for the next execution the values wont be same right? So It will fail for the second execution,
– sabarish jackson
Feb 23 at 5:59
@PRY First Part of Alphanumricals or whatever is static (i.e) value after p*_value will be static and value in (Single Quotes) after that static value will be dynamic. in the below patterns. RETURN TRANSLATE(p1_value,'0123456789', '0875642139'); RETURN TRANSLATE(p2_value,'0123456789', '0875642139'); RETURN TRANSLATE(p3_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz','ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg'); RETURN TRANSLATE(p4_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678
– sabarish jackson
Feb 23 at 6:04
|
show 5 more comments
May be possible first part is not static.
– Prvt_Yadv
Feb 23 at 5:45
Please update your question to include this. It makes a big difference to the implementation if you mean what I think you mean.
– l0b0
Feb 23 at 5:47
It's not my question just a comment that it is unclear.
– Prvt_Yadv
Feb 23 at 5:54
@10b0 The command which you have given will work if those values are static, But assume, we have changed it now with shuffled values using your SED command. for the next execution the values wont be same right? So It will fail for the second execution,
– sabarish jackson
Feb 23 at 5:59
@PRY First Part of Alphanumricals or whatever is static (i.e) value after p*_value will be static and value in (Single Quotes) after that static value will be dynamic. in the below patterns. RETURN TRANSLATE(p1_value,'0123456789', '0875642139'); RETURN TRANSLATE(p2_value,'0123456789', '0875642139'); RETURN TRANSLATE(p3_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz','ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg'); RETURN TRANSLATE(p4_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678
– sabarish jackson
Feb 23 at 6:04
May be possible first part is not static.
– Prvt_Yadv
Feb 23 at 5:45
May be possible first part is not static.
– Prvt_Yadv
Feb 23 at 5:45
Please update your question to include this. It makes a big difference to the implementation if you mean what I think you mean.
– l0b0
Feb 23 at 5:47
Please update your question to include this. It makes a big difference to the implementation if you mean what I think you mean.
– l0b0
Feb 23 at 5:47
It's not my question just a comment that it is unclear.
– Prvt_Yadv
Feb 23 at 5:54
It's not my question just a comment that it is unclear.
– Prvt_Yadv
Feb 23 at 5:54
@10b0 The command which you have given will work if those values are static, But assume, we have changed it now with shuffled values using your SED command. for the next execution the values wont be same right? So It will fail for the second execution,
– sabarish jackson
Feb 23 at 5:59
@10b0 The command which you have given will work if those values are static, But assume, we have changed it now with shuffled values using your SED command. for the next execution the values wont be same right? So It will fail for the second execution,
– sabarish jackson
Feb 23 at 5:59
@PRY First Part of Alphanumricals or whatever is static (i.e) value after p*_value will be static and value in (Single Quotes) after that static value will be dynamic. in the below patterns. RETURN TRANSLATE(p1_value,'0123456789', '0875642139'); RETURN TRANSLATE(p2_value,'0123456789', '0875642139'); RETURN TRANSLATE(p3_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz','ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg'); RETURN TRANSLATE(p4_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678
– sabarish jackson
Feb 23 at 6:04
@PRY First Part of Alphanumricals or whatever is static (i.e) value after p*_value will be static and value in (Single Quotes) after that static value will be dynamic. in the below patterns. RETURN TRANSLATE(p1_value,'0123456789', '0875642139'); RETURN TRANSLATE(p2_value,'0123456789', '0875642139'); RETURN TRANSLATE(p3_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz','ZYXWVUFEDCBATSRQPONMLKJIHGzyxwvufedcbatsrqponmlkjihg'); RETURN TRANSLATE(p4_value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678
– sabarish jackson
Feb 23 at 6:04
|
show 5 more comments
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
I think the key thing you need to use is regex grouping.
You can be very specific about what you match, and then include most of it in the output by reference.
sed 's#(common_str[(][keep class 0-9]+",")[replace class]+#1replacement str#'
sed 's#
(common_str[(][keep class 0-9]+",")[replace class]+
#
1replacement str
#'`
add a comment |
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
I think the key thing you need to use is regex grouping.
You can be very specific about what you match, and then include most of it in the output by reference.
sed 's#(common_str[(][keep class 0-9]+",")[replace class]+#1replacement str#'
sed 's#
(common_str[(][keep class 0-9]+",")[replace class]+
#
1replacement str
#'`
add a comment |
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
I think the key thing you need to use is regex grouping.
You can be very specific about what you match, and then include most of it in the output by reference.
sed 's#(common_str[(][keep class 0-9]+",")[replace class]+#1replacement str#'
sed 's#
(common_str[(][keep class 0-9]+",")[replace class]+
#
1replacement str
#'`
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
I think the key thing you need to use is regex grouping.
You can be very specific about what you match, and then include most of it in the output by reference.
sed 's#(common_str[(][keep class 0-9]+",")[replace class]+#1replacement str#'
sed 's#
(common_str[(][keep class 0-9]+",")[replace class]+
#
1replacement str
#'`
answered Feb 23 at 5:59
mcintmcint
11
11
add a comment |
add a comment |
You may follow the approach (bash shell)
First create appropriately named variables, generated variables, and their shuffled counterparts.
Then run the sed command.
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
add a comment |
You may follow the approach (bash shell)
First create appropriately named variables, generated variables, and their shuffled counterparts.
Then run the sed command.
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
add a comment |
You may follow the approach (bash shell)
First create appropriately named variables, generated variables, and their shuffled counterparts.
Then run the sed command.
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
You may follow the approach (bash shell)
First create appropriately named variables, generated variables, and their shuffled counterparts.
Then run the sed command.
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
answered Feb 23 at 15:15
Rakesh SharmaRakesh Sharma
342115
342115
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f502453%2fsearch-for-a-dynamic-pattern-in-a-file-in-a-file-and-replace-it-with-variables%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown