我有多个文件名看起来像;
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
答案 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)}')