sed を使用してファイルからエイリアスを削除する

sed を使用してファイルからエイリアスを削除する

取得した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"コマンドがないため、エラーが発生します。

おすすめ記事