私はこれを頻繁にやらず、時はいつも非常に敏感です。百万を超えるファイルから数値パターンを抽出する次のsedスクリプトがあります。これをAWKに送信する必要があるため、一致するパターンが見つかると、見つかったファイル名が印刷されます。行数が多くなりますが、あまりに欲を張らないでください。
希望の出力
ファイル名1 000-323423-33
ファイル名2 000-323423-33
ファイル名3 000-323423-33
いろいろな方法を試してみましたが、役に立ちません。経験のある人は私に正しい指示を提供できますか?よろしくお願いします!
#!/bin/sh
#shopt -s nullglob
FILES=/mnt/c/temp/1/*.txt
for f in $FILES
do
echo "Processing $f"
sed -nr \
-e '/[0-9]{3}-[0-9]{6}-[0-9]{2}/{
s/.*([0-9]{3}\-[0-9]{6}\-[0-9]{2}).*/\1/
G
p
}' $f
done
ベストアンサー1
あなたがやっていることがまさにあなたの使命のようですgrep
。コロンが本当に必要でない場合は、tr
ファイル名にコロンが含まれていないとし、 を使用してコロンを空白に変更します。
grep -Eon '[0-9]{3}-[0-9]{6}-[0-9]{2}' *.txt | tr ':' ' '
出力は次のようになります。
file1 10 000-323423-33
file2 20 000-323423-34
file3 30 000-323423-35
file3 31 000-323423-36