2016-06-16 8 views
0

私はgrepをより速く行くようにするには、テキストファイル1.grepbashが正しく

grep -P -e "^<job.+type.+rule" "Emake-4agents-1st-10-25-51.53.xml" 

を持って、私はこれが正常に動作しますbash

cat 1.grep | bash > 1.search

で次の操作を行いは通常ですが、この場合は次のようになります。

$ cat 1.grep 
grep -P -e "^<job.+type.+rule" "Emake-4agents-1st-10-25-51.53.xml" 

$ cat 1.grep | bash > 2.search 
: No such file or directory25-51.53.xml 

なぜbash私の.xmlファイル名はディレクトリであると判断されますか?

+2

あなたは 'cat foo | bash'をやりたくないので、' foo'をハッシュバングでシェルスクリプトとして作ることができ、 '+ x' – Kent

+0

' cat'_ing_bash'は助けになりません。 'grep -P -e"^ 1.search' – agc

+0

@agcこれは実用的ではありません。他のパラメータ。これはほんの一例です。 – Adrian

答えて

2

当面の問題は、ファイル1.grepは、DOS/Windows形式であり、そして行の末尾に改行が続くキャリッジリターンを持っていることです。 Windowsでは2文字の組み合わせが行末マーカーとして扱われますが、bash(およびgrepなど)などのUNIXツールでは行末のマーカーとして改行のみが処理されるため、改行は次のように扱われますラインの一部。その結果、存在しない "Emake-4agents-1st-10-25-51.53.xml^M"というファイル(ここでは^Mはキャリッジリターンを示します)から読み取ろうとしているため、エラーメッセージが表示されます

cat: Emake-4agents-1st-10-25-51.53.xml^M 
: No such file or directory 

...キャリッジリターンはあなたが見た不可解な結果を与え、第二部は、最初の部分を上書きします:それの真ん中にキャリッジリターンと。

解決方法:ファイルをunix(改行のみ)形式に変換し、unix形式で保存するテキストエディタを使用する場合は、dos2unixのような形式を使用します。

しかし、私はまた、cat | bashを使用して...単なる奇妙であることを特徴とする、いくつかのコメントに同意する必要があります。私はあなたが大きな絵で達成しようとしていることを正確には分かっていませんが、それが "正しい"方法であるとは思えません。

+0

よ!ありがとう。私はnotepad ++を広く使っています。私はこれを続けて、常に新しい行に '\ n'を使用させるためにhttp://stackoverflow.com/questions/8195839/choose-newline-character-in-notepadを実行しました。 'bash 'は今動作します。 – Adrian

+0

将来参照するには、 'tr '(またはsed)を使用して^ M文字を取り除くことができます:' tr' \ r '' \ n '

関連する問題