次のように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グループに参加して他の人の方法を学ぶことで、より迅速に適応することができます。