var='type_cardio_10-11-2017'
で変数を設定しています。変数から最後の10文字を削除し、残りの値をvar2
に追加する必要があります。
次のスクリプトで試してみましたが、期待どおりに動作しません。
var=type_cardio_10-11-2017
var2=${var} | cut -f1 -d "_"
echo ${var2}
必要な出力はtype_cardioです。
var
の最後の_
の後からすべてを削除し、その結果をvar2
に割り当てるには:
var2=${var%_*}
パラメータ拡張${parameter%Word}
は、指定された変数の値の末尾からパターンWord
(この場合は_*
)を削除します。
POSIX標準では、これを "Remove Smallest Suffix Pattern" パラメータ展開と呼んでいます。
最後の下線とその後の10文字を削除するには、次を使用します。
var2=${var%_??????????}
例のような日付文字列に対応する文字を削除するには、次を使用します。
var2=${var%_[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]}
使用するパターンは、マッチをどの程度注意深く実行したいかによって異なります。
文字列から末尾の11文字を実際に削除する必要があります。これを行う別の方法を次に示します。
$ var=type_cardio_10-11-2017
$ var2=${var%???????????}
$ echo "$var2"
type_cardio
bash
の別のアプローチ:
echo "${var::-10}"
または古いバージョンでは:
echo "${var::${#var}-10}" #or
echo "${var: : -10}"
1)bashソリューション:
var1="type_cardio_10-11-2017"
var2=${var1%_*}
2)カットソリューション:
var1="type_cardio_10-11-2017"
var2=$(cut -d'_' -f1,2 <<<"$var1")
echo "$var2"
出力:
type_cardio
var
と_var2
_を追加するのは簡単な部分です-_new_var="$var$var2"
_のようにそれらを結合するだけです。 本当に言うつもりならstoreを切り抜いてvar
を_var2
_に切り取れば、それはvar2=$(...)
だけですそして、他のユーザーと私の回答がここで提示したコマンドを$()
部分に入れることができます。
主な部分は、それらの10文字を削除することです。 var
から必要な部分を抽出する方法はいくつかあります。
printf
(かなりポータブルで、特定のシェルに依存していません)
_$ printf "%.11s\n" "$var"
type_cardio
_
awk
_$ var=type_cardio_10-11-2017
$ awk -v awk_var="$var" 'BEGIN{print substr(awk_var,0,length(awk_var)-11)}'
type_cardio
_
または、ここでprintf
トリックを使用することもできます。
_$ echo "$var" | awk '{printf "%.11s\n",$0}'
type_cardio
_
egrep
_$ echo "$var" | egrep -o '^.{0,11}'
type_cardio
_
Perl
:
_$ echo "$var" | Perl -lne 'print substr($_,0,11)'
type_cardio
_
python
:
_$ python -c 'import sys;print sys.argv[1][0:11] ' "$var"
type_cardio
_