0

次のような複数のファイル名があります。

com.test. app1 .deb

com.heavy.test. app2 .deb

com.maybe-test. app3 .deb

com.crazy. app-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
4

3 に答える 3

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
于 2012-04-23T06:37:10.007 に答える
1

キャプチャする文字列の一部からドットを除外できるように、負の一致が必要です。のような名前に不快な思いをさせないように、文字列も固定しましたcom.deboop.foo.deb

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

(コメントを反映するように編集)

于 2012-04-23T06:36:30.063 に答える
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)}')
于 2012-04-23T07:16:49.093 に答える