从文件名中提取域

时间:2018-09-11 18:37:15

标签: regex bash unix

我得到了一个zip文件,其中包括4个文件,命名规则如下:

2018.foo.abc.example.co.uk.20183740273
2018.foo.bcd.example.co.uk.20183740474
2018.foo.dce.example.co.uk.20183749769
2018.foo.def.example.co.uk.20183746483

我的任务是从任何文件名(任何,因为所有域都相同)中提取域,并将其存储到bash变量中。这些文件名仅是示例。关键是领域。分割发生在第三个点之后。

2 个答案:

答案 0 :(得分:3)

如果所有文件都使用相同的约定命名,则可以使用一些基本的AWK查找答案:

awk -F'.' 'print{$3,$4,$5}' <filename>

-F =字段分隔符。在这种情况下,它是.。现在,我们已经将文本基本上分解为数据列,并在.上进行了拆分,接下来我们告诉AWK要打印出哪些字段。

或者您可以使用cut:

cut -d '.' -f3-5 <filename>

与AWK相同,只是一种不同的实现方式。

答案 1 :(得分:1)

如果您要提取具有不同字段数的域(例如example.co.ukexample.com),则可以使用sed

sed 's/\([^.]*.\)\{3\}//;s/.[0-9]*$//' filename

sedcut的组合,更易读:

sed 's/.[0-9]*$//' filename | cut -d '.' -f4-