
変数がに設定されていますvar='type_cardio_10-11-2017'
。変数から最後の10文字を削除し、残りの値をに追加する必要がありますvar2
。
次のスクリプトを試しましたが、期待どおりに動作しません。
var=type_cardio_10-11-2017
var2=${var} | cut -f1 -d "_"
echo ${var2}
私が望む出力はハート型。
答え1
最後のもの以降のすべてを削除し_
てvar
結果を次に割り当てるには、次のようにしますvar2
。
var2=${var%_*}
パラメータ拡張は、指定された変数値の末尾から${parameter%word}
パターンを削除しますword
(この場合)。_*
POSIX標準はこれを呼び出します。「最小サフィックスパターンの削除」パラメータ拡張。
最後のアンダースコアとその後の10文字を削除するには、次のようにします。
var2=${var%_??????????}
日付文字列に対応する文字(例の文字など)を削除するには、次のようにします。
var2=${var%_[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]}
使用するモードは、一致をどれだけ慎重に実行するかによって異なります。
答え2
実際に末尾を削除したいです。11文字列の文字は次のとおりです。
$ var=type_cardio_10-11-2017
$ var2=${var%???????????}
$ echo "$var2"
type_cardio
答え3
別の方法bash
:
echo "${var::-10}"
または以前のバージョンでは:
echo "${var::${#var}-10}" #or
echo "${var: : -10}"
答え4
合計を追加するのは簡単な部分var
です。var2
このように組み合わせることができますnew_var="$var$var2"
。場合は本物あなたが欲しいという意味です。お店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