2017-05-05 14 views
0

私は、ファイル内のすべてのフォルダをチェックし、それらに正規表現をマッチさせるコードを書いていますが、ディレクトリにサブディレクトリがあります。私はそれは私がすべてのSOおよびインターネット上で見てきたし、私が見つけた私は、コードを使用しようとしたSEDはサブディレクトリを開くことができません

役立つ何かを見つけることができません

sed: couldn't edit TestFolder: not a regular file

私は、このエラーを与えるのコードを実行します私の問題を解決するために役立つものではありませんので、恐ろしい可能性のあるコードを謝罪します。さまざまなソースから引き出されています

`pwd = "$PWD" 
find $pwd = -print | xargs -0 sed -i "/10.0.0.10/d" !(test.sh) 

私のディレクトリ構造は、見つけるのGNU xargsの、およびGNUのsedはGNUで

Test -one.txt -two.txt TestFolder -three.txt

答えて

2

を、次のとおりです。

find . -type f -not -name 'test.sh' -print0 | xargs -0 sed -i '/\<10\.0\.0\.10\>/d' 
+0

を元の溶液がうまく働いた、あなたが分離する目的を説明することができます'\'の式は? –

+0

オリジナルは機能しませんでした。失敗したことに気付かなかったのはおそらく、失敗を引き起こす入力に対して実行していなかったからです。 '.'は任意の文字にマッチする正規表現のメタキャラクタなので、'/10.0.0.10/d'は '10X010Y10'のような文字列を含む行を削除します。 '.'をエスケープすると文字通りになり、' .'sを含む目的の文字列にのみ一致します。最小限の単語境界でも '10 \ .0 \ .0 \ .10'は' 510.0.0.103'やそれに類するものと一致しません。あなたの入力ファイルidkを見ることなく、あなたが必要とする可能性のあるミスマッチに対する他の保護を教えてください。 –

+1

ここではxargsは必要ありません、 'find。 'test.sh '-exec sed -i' /\<10\.0\.0\.10\>/d '{} +'はどんな種類のファイル名でも行います。スペース、改行など。 – Sundeep

関連する問題