ls "*Lan*" | awk '{org=$0;gsub("Lan", "ch7_Lan");system("mv "org" "$1)}'
首先保存原始的数据
其次修改 Lan为 ch_Lan
最后执行mv动作
其中,最后system命令”mv “org” “需要使用”“来标记,
而且 org也需要”“,并且不能使用$org
1. 对于 awk命令中的变量,不需要用 $来引用
2. 在system()中,变量需要使用""来标识,否则就被当成字符串来处理
3. 如果对变量进行 $来进行引用,就会出现两种情况
3.1 正常情况下,可以被当成位置参数来引用。比如 NF表示当前行的记录个数。比如echo "a b c d" | awk '{print NF, $NF}',这个会打印两个变量,第一个是 NF本身,其值为4;第二个是第四个位置参数,也就是 $4,也就是 d
3.2 非正常情况下:
3.2.1 如果变量本身就是个字符串。比如 echo "a b c d" | awk '{va=“varA";print va, $va}',因为后一个参数$va,由于va是个字符串,因此 $va打印的就是 $0
3.2.2 如果变量本身就是个数字,但是该值大于 NF。 比如echo "a b c d" | awk '{va="varA";vb=6;print va, $va, vb, $vb, 1}',因为 $vb相当于是 $6,但是位置参数 $6没有,因此打印的就是个空字符
[martin@TSPerPacketsTest]$ echo "a b c d" | awk '{print NF, $NF}'
4 d
[martin@TSPerPacketsTest]$ echo "a b c d" | awk '{va="varA";print va, $va}'
varA a b c d
[martin@TSPerPacketsTest]$ echo "a b c d" | awk '{va="varA";vb=6;print va, $va, vb, $vb, 1}'
varA a b c d 6 1
4. 使用 sed中的 s来进行替换,然后使用e命令来执行
[martin@TSPerPacketsTest]$ ls *Lan* | sed -r -n 's/(.*)Lan(.*)/mv & \1ch_Lan\2/e'