我“继承了”一个旧的csh脚本,运行良好,但现在我被要求改进一些东西。现在我试着理解几年前的程序......
在某些地方,sed用于提取文件名或目录名,我无法理解其中发生的事情。也许有些人能够和善意向我解释。
代码行是:
set File = `echo $Dirnames[$i] |sed 's/.*\///'`".bdf"
set Dir = `echo $Dirnames[$i] | sed 's/\(.*\)\/.*/\1/'`
我理解除sed部分之外的所有代码......
答案 0 :(得分:1)
假设为sed 's/.*\///'
分配了文件路径:
.*\/
:从路径中移除任何字符,直到最后一个斜杠.bdf
。路径的剩余部分(即文件)与s/\(.*\)\/.*/\1/
扩展名/
:输出文件目录的路径。截至\(.*\)
的所有字符都会被捕获\1
并使用反向引用17:21:07 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6ffb000 <0.000326>
17:21:07 mmap2(NULL, 8859, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6ff8000 <0.000337>
17:21:07 mmap2(NULL, 430216, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6f6c000 <0.000479>
17:21:07 mmap2(0xb6fd4000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x68000) = 0xb6fd4000 <0.000571>
17:21:07 mmap2(NULL, 1258856, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6e38000 <0.000517>
17:21:07 mmap2(0xb6f66000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x126000) = 0xb6f66000 <0.001654>
17:21:07 mmap2(0xb6f69000, 9576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6f69000 <0.002229>
17:21:07 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6ff7000 <0.000071>
17:21:07 munmap(0xb6ff8000, 8859) = 0 <0.000568>
17:21:07 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6ffa000 <0.000082>
输出