42

いくつかのファイルを含むディレクトリがあるとします。

$ ls
a.c  b.c  e.c  k.cpp  s.java

ファイル拡張子(ドットに続く部分、そのドットを含む)なしで結果を表示するにはどうすればよいですか?このような:

$ <some command>
a
b
e
k
s
4

5 に答える 5

62

sedを使用していますか?

ls -1 | sed -e 's/\..*$//'
于 2012-12-03T01:56:52.883 に答える
15
ls | while read fname 
do
    echo ${fname%%.*}
done

それを試してみてください。

于 2012-12-03T01:56:22.873 に答える
8
ls -a | cut -d "." -f 1

男 (1) カット

非常に便利な -d スイッチは、区切り文字と -f 必要なフィールドを定義します。

編集:ロジックは多少異なりますが、カットも最後から開始できるため、リバーフォールのシナリオを含めることも簡単です。これは、ランダムな名前のファイルの束の例です。2つのドットを持つもの、単一のドットを持つもの、拡張子のないものがあります:

runlevel0@ubuntu:~/test$ ls
test.001.rpx  test.003.rpx  test.005.rpx  test.007.rpx  test.009.rpx  testxxx
test.002.rpx  test.004.rpx  test.006.rpx  test.008.rpx  test_nonum    test_xxx.rtv


runlevel0@ubuntu:~/test$ ls | cut  -d "." -f -2
test.001
test.002
test.003
test.004
test.005
test.006
test.007
test.008
test.009
test_nonum
testxxx
test_xxx.rtv

フィールド番号の前にマイナスを使用すると、指定されたフィールド (この場合は 1,2) 以外のすべてが削除され、後ろにマイナスを配置すると、最後からカウントが開始されます。

これと同じ表記法は、フィールド以外のオフセットや文字にも使用できます (man ページを参照してください)。

于 2016-05-27T08:37:19.593 に答える