3

パスからファイル名を抽出する方法; ファイルのリストがあります。私は csh シェルを使用しており、awk、sed、perl がインストールされています。

/dfgfd/dfgdfg/ファイル名

私に与えるべきです

ファイル名

ベース名を試しました:

    find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h'
 | xargs grep -l pattern | xargs basename

そして、それは私に次のエラーを与えました:

basename: 引数が少なすぎます。詳細については、「basename --help」を試してください。

どうも

4

4 に答える 4

11

標準プログラムbasenameはあなたが望むことをします:

$ basename /dfgfd/dfgdfg/filename
filename
于 2009-09-30T14:58:36.460 に答える
1

この種の回避策は私にとってはうまくいきました。あなたはperlを持っていると言ったので、これは実行されるはずです。最後の / までのすべての非スペース テキストを何も置き換えません (効果的に削除します)。

find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h'
 | xargs grep -l pattern | perl -pi -e "s/\S+\///g"
于 2009-09-30T15:13:49.760 に答える
0

OK、AWKを使用して素晴らしい解決策を見つけました:

    find  $PROJECT_DIR  -name '*.c' -o -name '*.cc' -o -name '*.h' 
| xargs grep -l PATTERN | awk -F "/" '{print $NF}'
于 2009-09-30T17:23:19.667 に答える
0
find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h' | xargs grep -l pattern 
| xargs -n1 basename

これを試して !!

ベース名として単一のパスパラメーターを引数として受け入れるため、xargs にそれを 1 つずつ分割するように強制します。

于 2012-04-11T11:38:04.143 に答える