我有一个类似的文件 A_B_C_D_E_F_20180904_0038849_SUPER03.txt
我只想提取A_B_C_D_E_F.txt
我的尝试
echo A_B_C_D_E_F_20180904_0038849_SUPER03.txt |sed -e 's/'_[0-9]{8}_.*'/'*.txt'/g'
答案 0 :(得分:1)
您可以尝试以下方法:
echo A_B_C_D_E_F_20180904_0038849_SUPER03.txt \
|sed -e 's/_[0-9]\{8\}_[0-9]\{7\}_[A-Z0-9]*//g'
其中:
_[0-9]\{8\}
-匹配_20180904
_[0-9]\{7\}
-匹配_0038849
_[a-zA-Z0-9]*
-匹配_SUPER03
结果是:A_B_C_D_E_F.txt
答案 1 :(得分:1)
这可能对您有用(GNU sed):
sed 's/_[0-9][^.]*//' file
删除第一次出现的下划线,然后删除一个整数直到一个句点。
答案 2 :(得分:1)
如果将文件名分配给变量,并且外壳程序为bash
,则可以避免使用sed
并直接使用参数扩展:
v="A_B_C_D_E_F_20180904_0038849_SUPER03.txt"
echo "${v%_*_*_*}.${v#*.}"
A_B_C_D_E_F.txt
bash
运算符%
和#
分别删除匹配的后缀或前缀模式。
答案 3 :(得分:0)
一些事情需要改变:
-e
选项运行sed,该选项旨在运行sed脚本\{
和\}
来表示sed的正则表达式语法中的量词*
通过上述更改,这将产生A_B_C_D_E_F.txt
:
echo A_B_C_D_E_F_20180904_0038849_SUPER03.txt |sed 's/_[0-9]\{8\}_.*/.txt/'