この形式の文字列の場合:
./my-site.sub.domain.com
.
、-
およびを削除し、/
残りの部分を16文字に切りたいと思います。mysitesubdomainc
私はすでにこれをしました
mysite="./my-site.sub.domain.com"
mysite=${mysite//[\.|\/|-]//}
mysite=${mysite:0:16}
echo $mysite
mysitesubdomainc
置換と部分文字列抽出を組み合わせる方法はありますか?
答え1
Bash内蔵を接続する方法はありませんパラメータ拡張ただし、もちろん、これは外部ツールを使用して1行で実行できますsed
。たとえば、次のようになります。
$ sed 's/[\.\/-]//g;s/^\(.\{16\}\).*/\1/' <<< "./my-site.sub.domain.com"
mysitesubdomainc
残念ながら、これはメンテナンスできないコードになり、Bash内部を使用するよりも効率が悪くなる可能性があるため、使用しないことをお勧めします。
答え2
zshを使用しないのはなぜですか?
$ echo ${${mysite//[\.\/-]/}:0:16}
mysitesubdomainc
(コードを少し修正しました)
答え3
@l0b0が言ったように、これはシェルでは1つのステップでは実行できないと思いますが、外部ツールを使用すると十分簡単です(文字列が変数に保持されていると仮定$s
)。
$ perl -pe 's#[.\-/]##g' <<<$s | grep -oP .{16}
mysitesubdomainc