Bash は、置換と部分文字列抽出を 1 段階にまとめます。

Bash は、置換と部分文字列抽出を 1 段階にまとめます。

この形式の文字列の場合:

./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

関連情報