「検索」を使用して、bashスクリプトの各行から2つの値を検索します。

「検索」を使用して、bashスクリプトの各行から2つの値を検索します。

こんにちは、「検索」を使用して再帰的に検索するファイルがたくさんあります。次に、これらのファイル形式をすべて見つけたら、次の順序でその文字列と一致しない各行のすべてのレコードを削除したいと思います。

INPUT||||SELECT 'BLABLA' as SOR'

- INPUT||||SELECT(大文字と小文字を区別しない)が行を開始する場合 - 単一引用符(BLABLA)の間にある内容はランダムなので、ここにワイルドカードが必要です。
- 'as SOR'は大文字と小文字を区別しません。

取得されたデータファイルの1つの例:

1) INPUT||||select 'LLC'    
2) INPUT||||select 'LLC' as SOR, b.cust_id_num, b.cust_federal_id_num, ...
3) INPUT||||select distinct 'LLC' as SOR, b.cust_id_num, b.cust_federal_id_num, ...
4) INPUT||||select 'BBD' as sor, b.cust_id_num, b.cust_federal_id_num, ...
5) INPUT||||SELECT 'GOD' $VAL, b.cust_ID_num, a, cust live num...
6-+++)... 

成功した検索では、次の結果を生成する必要があります。 -
最初の行は無視され、「as sor」の反復は発生しません。 -
2行目はすべての条件を満たすため、キャプチャされます
。 - 'distinct'が表示されるため、3行目は無視されます。 'select'と 'between sor'では、 -
4行目はすべての条件を満たすため、キャプチャされます
。 - 5行目は無視され、「as sor」では繰り返されません。

たくさん試してみましたが、運がありませんでした。

find . -type f -iname "*.dat" -exec sh -c awk '/INPUT||||select/ && /'as SOR'/' "{}" \; > FILE.log
find . -type f -iname "*.dat" -exec grep 'INPUT_SELECT\|as sor' {} \; >  FILE .log

私は本当にこのようなものが私のスクリプトで動作すると思いましたが、そのような幸運はありませんでした!

grep -i "INPUT\||||select \<'...'\> as sor" ...

問題を解決するために様々な脱出と引用を試みたが、依然として注文の言及に対応していない履歴が返されます。よろしくお願いします!

ベストアンサー1

これはどうですか?

grep -i -e "INPUT||||select '.*' as SOR" test.in

おすすめ記事