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个字符)*
literal\u是否要匹配\u d
因为(.{8})
匹配任何字符,
匹配8个字符。使用{8}
我们捕获它们,以便以后可以重用它们()
行末的任意字符数*$
打印回捕获的组\1
\u d
不会显示在其他任何地方。嘿,谢谢!那很有效!你能给我解释一下这个表达式的语法吗?@AlecH我刚刚更新了一些关于这个命令的解释。