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

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

次のように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

答え2

echo "unix" | sed -e 's/\(.\)/\/\1/g' | sed -e 's/$/\//'

出力:

/u/n/i/x/

答え3

すべてのUnixシステムのすべてのシェルでawkを使用してください。

$ echo 'unix' | awk '{gsub(/./,"/&"); print $0"/"}'
/u/n/i/x/

答え4

sedを使用する1つの方法は、末尾に改行文字を追加することです。

$ echo Unix | sed -n 'G;s|.|/&|g;P'
/U/n/i/x/

次の方法も使用できます。どちらも awk n sed の GNU バージョンを使用します。

$ echo Unix | sed -e 's/./\n&/g;G' | paste -sd'/'
$ echo Unix | awk '{$1=OFS $1}++NF' FPAT=. OFS=/

sed編集者のための最高のリソースは、Dale Dougherty et alのO'Reillys' sed n awkです。また、このようなより多くのsedグループに参加して他の人の方法を学ぶことで、より迅速に適応することができます。

関連情報