String 从文件名中提取子字符串

String 从文件名中提取子字符串,string,awk,substring,extract,cut,String,Awk,Substring,Extract,Cut,我有以下文件名格式的文件列表: [some unknown amount of characters][_d][yyyymmdd][some unknown amount of characters] 我想提取包含日期(yyyymmdd)的子字符串,我知道该日期将始终由“\u d”进行。所以基本上我想提取“\u d”后面的前8个字符 这样做的最佳方式是什么?我会使用sed: $ echo "asdfasd_d20150616asdasd" | sed -r 's/^.*_d(.{8}).*$/

我有以下文件名格式的文件列表:

[some unknown amount of characters][_d][yyyymmdd][some unknown amount of characters]
我想提取包含日期(
yyyymmdd
)的子字符串,我知道该日期将始终由
“\u d”
进行。所以基本上我想提取
“\u d”
后面的前8个字符


这样做的最佳方式是什么?

我会使用
sed

$ echo "asdfasd_d20150616asdasd" | sed -r 's/^.*_d(.{8}).*$/\1/'
20150616
这将获取一个字符串并删除
\u d
之前的所有内容。然后,捕获以下8个字符并将其打印回来

  • sed-r
    用于捕获仅使用
    ()
    而不是
    \(\)
    的组
  • ^.*$
    • ^
      行的开头
    • *
      任意数量的字符(即使是0个字符)
    • \u d
      literal\u是否要匹配
    • (.{8})
      因为
      匹配任何字符,
      {8}
      匹配8个字符。使用
      ()
      我们捕获它们,以便以后可以重用它们
    • *$
      行末的任意字符数
  • \1
    打印回捕获的组

您需要确保在约会之前,您的
\u d
不会显示在其他任何地方。嘿,谢谢!那很有效!你能给我解释一下这个表达式的语法吗?@AlecH我刚刚更新了一些关于这个命令的解释。