文字列の各文字の前と最後の文字の後に「/」を追加します。

文字列の各文字の前と最後の文字の後に「/」を追加します。

次のようにPythonを使用してこれをsed行うawkことができますunix/u/n/i/x/

separator='/'
separator.join(string)+separator

しかし、シェルでこれをどのように達成できますか?

ベストアンサー1

$ echo unix | sed -e 's,.,&/,g' -e 's,^,/,'
/u/n/i/x/

これは次のようになります。予告の答えただし、両方の式をsed実行して呼び出しを削除し、コマンドのsed代替区切り文字としてコンマを使用して使用される正規表現を単純化しますs///

ここで使用される最初の置換は、入力文字列の各文字をそれ自体に置き換え、その後に1/文字が続きます。 2番目の置換は/文字列の先頭にaを挿入します。

コマンドsedはに短縮できますsed 's,.,&/,g; s,^,/,'。つまり、で区切られた両方の代替項目を含む単一の引数を使用します;


GNUを使用すると、sed次のこともできます。

$ echo unix | sed 's,.\{0\},/,g'
/u/n/i/x/

正確に.\{0\}ゼロ文字と一致します。 GNUは、sedこの式が文字列内のすべての文字間で一致するようにします。他のsed実装ではこれをエラーと見なすことができます。ここでは、OpenBSD sed

$ echo unix | sed 's,.\{0\},/,g'
sed: 1: "s,.\{0\},/,g": RE error: empty (sub)expression

おすすめ記事