2016-10-03 1 views
0

レガシーコードを満たすためには、以下に示すようにファイル名に日付を追加する必要がありました(間違いなく必要で、従​​来のコードを変更することはできません)。新しい行に行くことなく、同じコマンドを実行します。私は、単一のコマンドの中にこれを行う必要がありますので、このコマンドは、テキストファイルから読み込まれます。Unix:1つのコマンドで文字列から日付を削除する

$((echo "$file_name".`date +%Y%m%d`| sed 's/^prefix_//') 

ので、ここで私は、ファイル名からプレフィックスを削除し、に追加日付を追加していfilename:私はまた、私が追加した日付を削除したいと思います:ex:prefix_filename.txtまたはprefix_filename.zipは以下のように私に与えます:

期待ED出力:

filename.txt 
filename.zip 

電流出力:

filename.txt.20161002 
filename.zip.20161002 
+1

あなたの質問を読みにくくしています。あなたの本当の質問は何ですか?ファイル名から日付を削除するか、日付を追加せずに接頭辞を削除するだけですか? –

+0

ファイル名やsedコマンドを使わずに日付文字列だけをエコーすることはできますか? – Beta

+0

私は言及したコマンドに日付を追加して、私がすでに行っているプレフィックスを削除すると同時にそれを削除する必要があります。 –

答えて

0

すべてのファイルがfilename.ext.dateとしてフォーマットされているAssumming、あなたは「カット」コマンドにパイプ出力することができますし、唯一の第一及び第二の取得フィールド:

~> X=filename.txt.20161002 
~> echo $X | cut -d"." -f1,2 
filename.txt 
+0

それはどうにかしなかった:(すべてのファイル名が異なるフォーマットになっていた) –

+0

可能なファイル名の例とフィルタリング方法を – chenchuk

+0

prefix_account_information.zip、prefix_employee_names_ssn.zip、prefix_employee address.txt、prefix_employee_salaryとしてください。DATなどいくつかの例があります –

0

私は私が正しくあなたの質問を理解していることを確認していないが、おそらくこれはあなたが欲しいものを行います。

$((echo "$file_name".`date +%Y%m%d`| sed -e 's/^prefix_//' -e 's/\.[^.]*$//') 
+0

あなたが言ったことは正しいですが、実際のファイル名には、(prefix_original.report.status.txtやprefix_ooriginal.report.zipやprefix_original.status.DATのような)ファイル名に複数のピリオドがあるかもしれません。 –

+0

@ KarthikeyanChidambaram:その場合の出力は?そのような場合にこのソリューションをテストしましたか? – Beta

0

サンプル入力:数字が続くリテラルドット"."までの文字列の先頭から

cat sample 
prefix_original.txt.log.tgz.10032016 
prefix_original.txt.log.10032016 
prefix_original.txt.10032016 
prefix_one.txt.10032016 
prefix.txt.10032016 
prefix.10032016 

grep

おそらく
grep -oP '^.*(?=\.\d)' sample 
prefix_original.txt.log.tgz 
prefix_original.txt.log 
prefix_original.txt 
prefix_one.txt 
prefix.txt 
prefix 

、以下を使用する必要があります:

grep -oP '^.*(?=\.\d)|^.*$' sample 
0

私が正しくあなたの質問を理解していれば、あなたは変数から日付部分を削除したい、あなたはすでに変数がないこと文脈から知っています日付部分を含み、この部分は名前の最後のピリオドの後に来る。

この場合、最後の期間とそれ以降のものが削除されます。これは、filename_withが終了日付部を有し、ファイル名が含まれていることを仮定

filename_without=${filename_with%.*} 

によって(POSIXシェルは、bash、zshの、kshの)を

を行うことができます。

0
% cat example 
filename.txt.20161002 
filename.zip.20161002 

    % cat example | sed "s/.[0-9]*$//g" 
filename.txt 
filename.zip 

% 
+0

このコードスニペットは問題を解決するかもしれませんが、[説明を含む](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。あなたのコードに説明的なコメントを詰め込まないようにしてください。これは、コードと説明の両方の可読性を低下させます! – kayess

関連する問題