PWD=sgy_comp.20170328_090951.20170328_090730.d_0327____20170325_002526.seiscat
.
我需要对这两者进行界定____
如果我尝试使用(这不起作用)的正常语法,[.____]
那么它会将 视为____
4 个分隔符(因为它____
与 相同_
)
例子:
basename $PWD
sgy_comp.20170328_090951.20170328_090730.d_0327____20170325_002526.seiscat
basename $PWD|awk -F[."____"] '{print $4}'
090951
我正在努力获得 的回报d_0327
。我明白为什么它没有按照我想要的方式工作,只是寻找正确的语法来使其工作。
答案1
[<set>]
火柴一字符(扩展为整理元素使用某些工具并在某些情况下)从提供的<set>
。
[.____]
特别匹配一字符,前提是它是.
or _
、 or _
、 or _
or _
。不用说,[.____]
是一样的[._]
。
如果要匹配两个字符串中的任何一个,则需要|
交替运算符:
awk -F '\\.|____' '{print $4}'
使用现代(和标准)awk
,您还可以编写它:
awk -F '\\.|_{4}' '{print $4}'
另请注意,[...]
需要对 shell 进行引用,因为[...]
它也恰好是 shell 通配符。就您而言,您仅引用了____
外壳部分。这不是必需的,因为_
这对 shell 来说并不特殊。这意味着-F[."____"]
,如果当前目录中有一个名为-F.
或 的文件-F_
,则 shell 通配符将-F[."____"]
在传递到 之前扩展到那些文件awk
。如果没有,-F[.____]
将被传递到awk
(尽管有些 shell 会报告一个错误,而不是关于不匹配的 glob)。