CBX-1234
文字列CBX-1234--CBX-5678
またはから文字列を取得しようとしていますCBX-12345--CBX-5678
。 Mac OSXでbashスクリプトを使用し、sedを使用して正規表現を実行しています。
string="CBX-1234--CBX-5678"
shortenedString=$(echo "$string" | sed "s/^([A-Za-z]+-[0-9]+)/\1/")
これにより、次のエラーメッセージが出力されます。
sed: 1: "s/^([A-Za-z]+-[0-9]+)/\1/": \1 は RE で定義されていません。
部分文字列をキャプチャする方法は? bashでsedや他の手段を使用するための提案を歓迎します。
答え1
拡張正規表現を使用するには、コマンドライン-E
に以下を追加する必要があります。sed
sed -E 's/^([A-Za-z]+-[0-9]+)/\1/'
CBX-1234--CBX-5678
文字列をに減らすには、CBX-1234
文字列全体を考慮して代替項目も変更する必要があります。
sed -E 's/^([A-Za-z]+-[0-9]+).*/\1/'
bash
パラメータ拡張も使用できます。
shortenedString="${string%%--*}"
$string
これにより、最初に発生した以降のすべての項目が削除されます--
。
答え2
私はいつも使うsed -r
$ echo "abhellocd" | sed -r "s/.*(hello).*/\1/g"
hello
sedのマニュアルページから:
-r, --regexp-extended
use extended regular expressions in the script.
このオプション-E
は私がリストしたものではありません。それも動作しますが。
答え3
あなたはそれを使用することができますecho "$string" | cut -d "-" -f 1,2
。