複数のファイルのデータを行で区切って新しいファイルに追加します。

複数のファイルのデータを行で区切って新しいファイルに追加します。

フォルダ内の個々のファイルには、さまざまなクライアント用の100を超えるファイアウォールルールがあります。

ファイル名が次のとおりであるとします。

1.wawa.com_firewall_rule

2.newa.com_firewall_rule

各ファイルには顧客のIPが含まれています。私にとって必要なのは、ファイルから各顧客のIPを抽出して、次の形式で単一の新しいファイルに追加することです。

wawa.com
192.168.1.1
newa.com
8.8.8.8
9.9.9.9

これでIPを抽出して新しいファイルに保存できるようになりました。ただし、すべてを1つのファイルに保存する必要があります。 (報告されているように) - 以下のコードを参照してください。

#!/bin/bash
cd /opt/zeus/zxtm/conf/rules/sba_filter/test
for f in *; do 
#echo $f > hosts.txt
grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" "$f" > "$f.txt"
done

ベストアンサー1

仕事を維持してください。考えられる解決策は次のとおりです。

#!/bin/bash
cd /home/prova
for f in *; do 
  basename $f '_firewall_rule' >> output.txt
  printf "\n" >> output.txt
  grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" "$f" | while read -r line ; do
    echo $line >> output.txt
    printf "\n" >> output.txt
  done
done

コメントで最適化の貢献を見る

おすすめ記事