提取部分文件名

时间:2012-04-23 06:30:37

标签: linux replace sed extract filenames

我有多个文件名看起来像;

com.test。的 APP1 的.deb

com.heavy.test。的 APP2 的.deb

com.maybe测试。的 APP3 的.deb

com.crazy。应用-4 的.deb

我只想获得粗体字符串。 到目前为止,我有这个,

name=$(echo $file | sed 's!\(*.\)\(.*\).deb!\2!')

编辑: 我在同一个目录中有其他文件,可以命名为;

com.company。的名称 _1.0.2_arm.deb

目前,我的代码看起来像是

for file in *.deb; do
 name=$(echo "$file" | sed 's/^.*\.\([^.][^.]*\)\.deb$/\1/')
 echo $name
done

3 个答案:

答案 0 :(得分:1)

您需要否定匹配,以便从字符串中要捕获的部分中排除点。我还固定了字符串,这样你就不会对像com.deboop.foo.deb这样的名字感到讨厌。

name=$(echo "$file" | sed 's/^.*\.\([^.][^.]*\)\(_[-.0-9][-.0-9]*_arm\)*\.deb$/\1/')

(编辑以反映评论)

答案 1 :(得分:1)

$> cat text
com.test.app1.deb
com.heavy.test.app2.deb
com.maybe-test.app3.deb
com.crazy.app-4.deb

$> sed -r "s/.*\.([^\.]*)\.deb$/\1/" ./text
app1
app2
app3
app-4

答案 2 :(得分:1)

pearl.238> cat file1
com.test.app1.deb
com.heavy.test.app2.deb
com.maybe-test.app3.deb
com.crazy.app-4.deb
pearl.239> awk -F. '{print $(NF-1)}' file1
app1
app2
app3
app-4
pearl.240> 

您应该在脚本中使用以下内容。

name=$(echo $file |awk -F. '{print $(NF-1)}')