sed を使用して (***) を \(***\) に置き換える方法

sed を使用して (***) を \(***\) に置き換える方法

そこで、mkdirコマンドに渡すことができるように、特殊文字をエスケープされたその文字に置き換えるスクリプトを作成したいと思います。友だちが同様の行を使用しているため、これを使用して角かっこを次の下線に置き換えることができます。

echo 'Hello (World)' | sed 's/(\|)/_/g'

しかし、次のコマンドに変更すると、出力は私が望むものではありません。

echo 'Hello (World)' | sed 's/(\|)/\(\|\)/g'

システム出力: Hello (|)World(|)
希望の出力: Hello \(World\)

これを行う方法はありますか? "tr"コマンドを使用するなど、他の人の提案を使用しましたが、それからも目的の出力を取得できませんでした。

ベストアンサー1

... mkdirコマンドに渡すためにエスケープされた対応するエントリを使用します。

まったくしないでください。代わりに、引用するひも:

name1="Hello (World)!"
name2="I want this to be a five-star directory (*****)"
mkdir -- "${name1}" "${name2}"

そうでなければ

mkdir "Hello (World)"
mkdir "I want this to be a five-star directory (*****)"

シンプルで効果的です。

おすすめ記事