Regex 如何使用sed/awk/perl在文件中使用递增的字母数字值进行递归替换
如何使shell脚本使用Sed或awk递归替换相同的值和递增的字母数字值,并再次使用递增的字母数字值递归内部。它应该一直发生到文件末尾的第n个值 ---输入文件如下----Regex 如何使用sed/awk/perl在文件中使用递增的字母数字值进行递归替换,regex,perl,awk,sed,Regex,Perl,Awk,Sed,如何使shell脚本使用Sed或awk递归替换相同的值和递增的字母数字值,并再次使用递增的字母数字值递归内部。它应该一直发生到文件末尾的第n个值 ---输入文件如下---- ---输出要求如下---- 以下是一些帮助您的方法: awk -F\" '/^<first/ {a++;b=0} {n=split($2,s,"/");q=s[n];$2="A0"a ($0~/<inner/?"_0"++b"_"q:"")}1' OFS=\" file <first line has
---输出要求如下----
以下是一些帮助您的方法:
awk -F\" '/^<first/ {a++;b=0} {n=split($2,s,"/");q=s[n];$2="A0"a ($0~/<inner/?"_0"++b"_"q:"")}1' OFS=\" file
<first line has same value as testname="A01" enabled="true">
<inner first line has url testname="A01_01_" enabled="true">
<inner second line has url testname="A01_02_views?" enabled="true">
<first line has same value as testname="A02" enabled="true">
<inner first line has url testname="A02_01_perf" enabled="true">
<inner second line has url testname="A02_02_surf" enabled="true">
<inner third line has url testname="A02_03_duff" enabled="true">
<first line has same value as testname="A03" enabled="true">
<inner first line has url testname="A03_01_complete" enabled="true">
<inner second line has url testname="A03_02_one" enabled="true">
<inner third line has url testname="A03_03_two" enabled="true">
awk-F\“/^你最好复制一小部分真实文本,否则在有人发布答案后,肯定会有乒乓球
回合。例如,我们如何知道第一行有
和第二行
。。。我们有什么固定的模式可以使用吗?我不认为首先
或内部
会是正确的选择。嗨,Jotne,谢谢你的帮助。你能详细地给我解释一下吗。还有一件事我可以处理,假设我有以下几行。假的
<first line has same value as testname="A01" enabled="true">
<inner first line has url testname="A01_01" enabled="true">
<inner second line has url testname="A01_02_views?" enabled="true">
<first line has same value as testname="A02" enabled="true">
<inner first line has url testname="A02_01_perf" enabled="true">
<inner second line has url testname="A02_02_surf" enabled="true">
<inner third line has url testname="A02_03_duff" enabled="true">
<first line has same value as testname="A03" enabled="true">
<inner first line has url testname="A03_01_complete" enabled="true">
<inner second line has url testname="A03_02_one" enabled="true">
<inner third line has url testname="A03_03_two" enabled="true">
awk -F\" '/^<first/ {a++;b=0} {n=split($2,s,"/");q=s[n];$2="A0"a ($0~/<inner/?"_0"++b"_"q:"")}1' OFS=\" file
<first line has same value as testname="A01" enabled="true">
<inner first line has url testname="A01_01_" enabled="true">
<inner second line has url testname="A01_02_views?" enabled="true">
<first line has same value as testname="A02" enabled="true">
<inner first line has url testname="A02_01_perf" enabled="true">
<inner second line has url testname="A02_02_surf" enabled="true">
<inner third line has url testname="A02_03_duff" enabled="true">
<first line has same value as testname="A03" enabled="true">
<inner first line has url testname="A03_01_complete" enabled="true">
<inner second line has url testname="A03_02_one" enabled="true">
<inner third line has url testname="A03_03_two" enabled="true">
awk -F\" ' # Set field separator to "
/^<first/ { # If record starts with <first then do:
a++ # Increment variable a
b=0} # Set b to 0
{ # For all run do:
n=split($2,s,"/") # Split data in field 2, to array s slitted by /. Sen variable n to number of data in array s
q=s[n] # Set variable q to last element in array s
$2="A0"a ($0~/<inner/?"_0"++b"_"q:"") # Set field 2 to: "A0" + value of a + ( if $0 equal "inner" to "_0" b (auto increment) "_" q, else "")
}
1 # Print the line
' OFS=\" file # Set Output Field Separator to " and read the file