我有一些代码,我正在使用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一样难倒......
答案 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
答案 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]+'