
私の失敗した提案
find ./ -newerct '1 week ago' -print | grep TODO
出力が必要ですが、出力はありません。
ファイルは次のテキストファイルです。
Lorem
% TODO check this out
Lorem ipsun
TODOに一致する1週間未満のファイルを見つける方法は? 出力はTODOの次の行でなければなりません。 Perlソリューションは私も練習していて人気があります。
答え1
これを変更してください:
find ./ -newerct '1 week ago' -print | grep TODO
これに関して:
find ./ -newerct '1 week ago' -exec grep TODO {} +
またはこれ:
find ./ -newerct '1 week ago' -print | xargs grep TODO
説明する
grep
出力find
を検索するファイルのリストとして解釈するのではなく、入力として解釈します。つまり、grep
一致しようとします。TODO
名前ファイルの代わりにコンテンツ。
grep(1)
マニュアルページから:
grepは名前付き入力ファイルを検索します(ファイル名が指定されていない場合、または単一のハイフンマイナス記号(-)がファイル名として指定されている場合は、標準入力が検索されます)。
次の行を一致させるにはTODO
:
find ./ -newerct '1 week ago' -exec grep -A1 TODO {} + | grep -v TODO
これはGNUがあると仮定しますgrep
。
答え2
あなたはそれを使用することができます:
find ./ -type f -newerct '1 week ago' -exec sh -c "grep -H -A1 TODO {} | tail -1" \;
説明する:
-type f
:検索パターンにファイルのみを含める-exec sh -c "..."
:検索されたすべてのファイルに対して実行...grep -H -A1 TODO {} | tail -1
:-H
ファイル名を印刷し、-A1
一致する行を印刷し、tail -1
出力から最初の行(TODOを含む行)を削除します。
答え3
この試み
find . -type f -ctime -7 -print | grep -R "TODO" /etc/
-type f
- ファイルのみをリストするには、fと入力してください。
-ctime -7
作成されてから7日間が経過していないファイルに適用されます。