ファイルのIPアドレスをテキストファイルに保存されているIPアドレスに置き換えるshスクリプト

ファイルのIPアドレスをテキストファイルに保存されているIPアドレスに置き換えるshスクリプト

私は持っています

#!/bin/sh
tcpdump -c 1 -eni any host 100.80.1.252 > tcpd.txt
sleep 2
awk 'NR==1{print $9}' tcpd.txt > ip.txt
sleep 2
cat ip.txt

出力は100.70.62.33です。

ここで、file1のすべての100.70.xxアドレスをip.txtファイルに保存されているアドレスに変更したいと思います。

私が達成したいもの:

いくつかのiptablesルールを呼び出すshスクリプトがあります(100.70.xx IPを変更したいファイルです)。

cat set_direct_routing_server_2.sh

#!/bin/sh
iptables -t nat -F

iptables -t nat -A PREROUTING --source 192.168.219.2 --destination 192.168.219.4/30 -j DNAT --to-destination 100.70.62.21
iptables -t nat -A PREROUTING --source 100.70.62.21 --destination 100.80.1.252 -j DNAT --to-destination 192.168.219.2
iptables -t nat -A POSTROUTING --source 100.70.62.21 -j SNAT --to-source 192.168.219.6

ipstables -t nat -L

master.sh最初の投稿で私が話したスクリプトは次のとおりです。

#!/bin/sh
tcpdump -c 1 -eni any host 100.80.1.252 > tcpd.txt
sleep 2
awk 'NR==1{print $9}' tcpd.txt > ip.txt
sleep 2
cat ip.txt
sleep 2
sed -i "s/100\.70\.[0-9]\{1,3\}\.[0-9]\{1,3\}/$(<ip.txt)/g" set_direct_routing_server_2.sh
cat set_direct_routing_server_2.sh

master.shを呼び出すと、次の結果が表示されます。

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

すべてのリンクタイプ LINUX_SLL (Linux Cooked), キャプチャサイズ 262144 バイトキャプチャ 1 パケットフィルタ受信 2 パケットカーネルドロップ 0 パケット 100.70.62.33 #!/bin/sh iptables -t nat - F

iptables -t nat -A PREROUTING --source 192.168.219.2 --destination 192.168.219.4/30 -j DNAT --to-destination
iptables -t nat -A PREROUTING --source  --destination 100.80.1.252 -j DNAT --to-destination 192.168.219.2
iptables -t nat -A POSTROUTING --source  -j SNAT --to-source 192.168.219.6

ipstables -t nat -L

ご覧のとおり、100.70.xxアドレスのみが削除されます。

ベストアンサー1

s=$(cat ip.txt)
awk -v s="$s"  '{gsub(/100.70.[0-9].{1,3}.[0-9]/, s)}1' file.txt

s=$(cat ip.txt) この変数にはサブシェルの出力が格納されます。

-v s="$s"これは -vローカルシェル変数とグローバルシェル変数を受け取ります。この場合はローカルです。

 gsub グローバルな選択肢を表します。これは次の項目をすべて置き換えます。

/100.70.[0-9].{1,3}.[0-9]/ aki正規表現はすべてのIPと一致します。100.70. *

, s この変数は最初に作成したサブシェルの値を持ち、flagsを介して取得し-vawkこの時点でその値を印刷します。

1 true とみなされるので、印刷と同じです。

おすすめ記事