只使用Sed

时间:2016-12-09 03:03:18

标签: regex parsing sed

我有一些代码,我正在使用Windows和SED给我第一组八个字符的文件名,一直给我第二组,只是我无法弄清楚我做错了什么。

我的代码:

echo JiggySauce_20161208_21325005_Meat.txt | sed -r "s/.*_([0-9]*)_.*/\1/g"

添加示例(因此每个下划线分隔符的正则表达式不会始终有效)

echo JiggySauce_Mustard_Mayo_20161208_21325005_Meat.txt | sed -r "s/.*_([0-9]*)_.*/\1/g"

我一直得到错误的结果(至少不是我需要的):

21325005

我的预期结果:

20161208

我甚至可以和一起生活(最好不要,但可以使用我想的那样)

20161208_21325005

请帮助我,如果你有一个答案,因为我处于停滞状态,看起来很笨,像UHHH一样难倒......

2 个答案:

答案 0 :(得分:1)

使用GNU sed:

echo JiggySauce_20161208_21325005_Meat.txt | sed -r 's/^[^_]*_([^_]*).*/\1/'

<强>输出:

20161208

发布初步答复更新:

  

我建议:sed -r 's/[^0-9]*([0-9]{8}).*/\1/'   Cyrus

<强>输出:

20161208

请参阅:The Stack Overflow Regular Expressions FAQ

答案 1 :(得分:1)

使用grep

echo JiggySauce_20161208_21325005_Meat.txt | grep -Eo '[0-9]+' | head -1

echo JiggySauce_20161208_21325005_Meat.txt | tr '_' '\n' | grep -m1 -Eo '[0-9]+'