7

私はファイルを持っており、行があり、ネットマスク abcd/24 wxyz/32 などの ip が含まれています 特定の行を削除するにはどうすればよいですか? 私は使っています

sed -ie "s#a.b.c.d/24##g" %filname%

しかし、削除後はファイル内の空の文字列です。

ip をパラメーターとしてスクリプト内で実行し、sh の下の freebsd でも動作する必要があります。

4

4 に答える 4

14

セド ソリューション

 sed -i '/<pattern-to-match-with-proper-escape>/d' data.txt 

-iオプションは元のファイルを変更します。

Awk ソリューション

awk '!/<pattern-to-match-with-proper-escape>/' data.txt
于 2012-11-27T08:22:46.000 に答える
6

sed を使用:

sed -i '\|a.b.c.d/24|d' file

コマンド ライン引数: 入力がコマンド ライン引数である場合、最初の引数 ($1) とします。

sed -i "\|$1|d" file

あなたの場合のように、 $1 を適切な引数番号に置き換えます。

于 2012-11-27T08:30:31.147 に答える
2

g ではなく d (削除) を使用する必要があります。また、s (置換) は使用しないでください。

sed -ie '/a.b.c.d\/24/d' %filename%

スクリプトでは、このように使用する必要があります

IP=$1
IPA=${IP////\\/}
sed -i /"${IPA}"/d %filename%

また、スクリプト パラメータは次のように呼び出す必要があります。

./script.sh a.b.c.d/24
于 2012-11-27T08:27:13.177 に答える
1
perl -i -lne 'print unless(/a.b.c.d\/24/)' your_file

または、インプレース編集を行いたくない場合は awk で:

 awk '$0!~/a.b.c.d\/24/' your_file
于 2012-11-27T11:05:23.683 に答える