ファイル名とファイル名をすべて[a-yA-Y]に置き換えて、findからtxtファイルを作成する方法


0

私はこれを行うためにUNIXのワンライナーを頼みたい

これでファイル名は取得できます find . -type f > filenames.txtが、次のようなテキストファイルを取得したいと思います。

   filename;filenamekey
   ./fn123456789X-5.txt;./123456789X5.

2番目のフィールドは、すべての文字([a-yA-Y]以外の数字)で置き換えられたファイル名である必要があります。理由は、このフィールドがISBN(0-9およびXで構成される)で構成されているためです。

次に、このようにfilenamekeyで検索します Select filename from books where filenamekey like '%123456789X%';

ファイル名には、ISBNである必要はありませんが、可能です。ISBNがない場合、キーは空またはジャンクにする必要があります。

私はこれを試しました:

    find . -type f > filenames1.txt
    cat filename1.txt | sed -e 's/[^0-9X\/\.]//g' > filenamekey1.txt
    paste filename1.txt filenamekey1.txt | awk '{print $1,$2}'       

洗練されたワンライナーはありますか?

どうもありがとう!


superuser.comは無料のスクリプト/コード作成サービスではないことに注意してください。これまでに試したこと(既に使用しているスクリプト/コードを含む)と行き詰まっている場所を教えていただければ、特定の問題の解決を試みることができます。また、「良い質問をするにはどうすればよいですか?」もお読みください。
デビッドポスティル

わかりました、デビッド、私はファイル名に対してのみこれを行い、私のデルファイプログラムで置換ジョブをしました。私はUNIXの1行にそれほど馴染みがないので、txtファイルをMYSQLテーブルにインポートする前にそれを行うより洗練された方法かもしれません。wholefilenamesを作成してファイルに入れ、ファイル名をgrepして別のファイルに入れて再処理するなど、もっと多くのステップでそれを行うことができます。しかし、私は確かに、1人のUnixワンライナーでそれを行うことができるいくつかのスマートフリークがあります。
ウォルターシュラブマイアー16年

2つの基本的な方法で実行できます。(1)find . -type f -exec command parameters {} parameters \;、ここで、コマンドパラメーターは必要な処理であり、見つかった各ファイル名は置き換えられます{}(終了するまで繰り返すことができます\;)。より複雑な場合は、コマンドをスクリプトに組み込み、{}パラメーターとして渡すことができます。(2)find . -type f | while read name; do commands ... ; done、見つかった各ファイルに対してコマンドが使用する場所"$name"
AFH

@AFHどうもありがとう。私は今これを試しましたが、ここで2番目のフィールドを見逃してfind . -type f | while read name; do echo $name | sed -e 's/[^0-9\/\.]//g' | awk '{print $1,";",$2}' ; done います
ウォルターシュラブマイアー16年

私は自分の間違いを見つけました:私は今これを試しました:find . -type f | while read name; do ohne="$(sed -e 's/[^0-9X\/\.]//g' <<< $name)"; echo $name,";",$ohne; done
Walter Schrabmair

回答:


1

あなたが試すことができますsed

find . -type f | sed 'h;s/[^0-9X\/\.]//g;H;x;s/\n/;/'

たくさんありがとう、それは私が探していたものでした。スマートで短く、洗練された!
ウォルターシュラブマイアー

ワン・モア質問:どのように私はscirptのうち、これを取得したいあなたのワンライナーを変更する必要があります。"./123456789XTest";./123456789Xあなたが最初のフィールドが「THANKS LOTで引用されて参照してください!
ウォルターSchrabmair

試してくださいsed 'h;s/[^0-9X\/\.]//g;H;x;s/^/"/;s/\n/";/'
マイケルVehrs

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.