質問: awkコマンドで重複した$ pathエントリを削除します 私は、path環境変数からディレクトリの重複コピーを削除できるようにするbashシェル関数を作成しようとしています。awkコマンドを使用して1行のコマンドでこれを実現することは可能だと言われましたが、その方法がわかりません。誰か知ってる?
回答: また、sed(ここではgnu sed構文を使用)がジョブを実行できます。mypath=$(printf '%s\n' "$mypath" | sed ':b;s/:\([^:]*\)\(:.*\):\1/:\1\2/;tb') これは、dogbaneの例のように、最初のパスが.の場合にのみ機能します。一般的に、別のsコマンドを追加する必要があります。mypath=$(printf '%s\n' "$mypath" | sed ':b;s/:\([^:]*\)\(:.*\):\1/:\1\2/;tb;s/^\([^:]*\)\(:.*\):\1/:\1\2/') それはそのような構造でも機能します:$ echo "/bin:.:/foo/bar/bin:/usr/bin:/foo/bar/bin:/foo/bar/bin:/bar/bin:/usr/bin:/bin" \ | sed ':b;s/:\([^:]*\)\(:.*\):\1/:\1\2/;tb;s/^\([^:]*\)\(:.*\):\1/\1\2/' /bin:.:/foo/bar/bin:/usr/bin:/bar/bin