取得したIPを「hosts」というファイルに保存するpingスキャナを作成しました。その後、ファイルから私のIPアドレスを削除したかったのですが、私のIPアドレスが何であるかわからなかったので、次のようにしました。
alias ownip='hostname -I'
sed ownip ./host
この方法が機能しないため、次のエラーが発生します。
sed: -e expression #1, char 1: unknown command: `o'
では、ファイルから自分のIPを削除するにはどうすればよいですか?
ベストアンサー1
hostname -I
入力「ホスト」ファイルが1行に1つのIPアドレスを持つファイルであり、ファイルに出力されたすべてのIPアドレスを削除するには、次の手順を実行します。
sed -i "$(hostname -I | sed 's/\([.:[:xdigit:]]\{1,\}\)/\/\1\/d;/g')" ./host
コマンドにパイプされたホスト名は、ホスト名に出力されたIPアドレスを外部sedに変換するsed内のsed削除コマンドを置き換えます。 Sedのi
フラグは、sedにユーザーが提供したファイルを上書きするように指示します。出力が正しいことを確認するには、まずこのフラグなしで実行するか、その引数をサフィックスi
として使用して入力ファイルのバックアップを作成するようにsedに指示する引数をsedに指定できます。たとえば、-i'~'
名前付きバックアップが作成されますhost~
。使用しているsedバージョンにこのフラグがない場合は、一時ファイルに書き込んで元のファイルを上書きできます。
sed "$(hostname -I | sed 's/\([.:[:xdigit:]]\{1,\}\)/\/\1\/d;/g')" ./host > /tmp/newhost && mv /tmp/newhost ./host
私の考えi
にはとにかく後ろから何が起こっているようだ。
エイリアスを使用するには、エイリアスはただ最初の命令の場合、テキストの置き換えしたがって、元の例ではコマンド置換を使用する必要があります。つまり、$(ownip)を使用して実際にエイリアスを実行した結果をsedに提供する必要があります。エラーメッセージは、sedが "ownip"をスクリプトとして使用しようとしていることを意味します。この場合、sedに "o"コマンドがないため、エラーが発生します。