フィールド区切り記号「:」から行末まで印刷する方法
例:
echo " llap_java_opts : -XX:+AlwaysPreTouch {% if java_version > 7 %}-XX:+UseG1GC -XX:TLABSize=8m -XX:+ResizeTLAB -XX:+UseNUMA -XX:+AggressiveOpts"
llap_java_opts : -XX:+AlwaysPreTouch {% if java_version > 7 %}-XX:+UseG1GC -XX:TLABSize=8m -XX:+ResizeTLAB -XX:+UseNUMA -XX:+AggressiveOpts
予想出力:
-XX:+AlwaysPreTouch {% if java_version > 7 %}-XX:+UseG1GC -XX:TLABSize=8m -XX:+ResizeTLAB -XX:+UseNUMA -XX:+AggressiveOpts
答え1
私はこれを使用しますcut -d: -f2-
:
echo " llap_java_opts : -XX:+AlwaysPreTouch {% if java_version > 7 %}-XX:+UseG1GC -XX:TLABSize=8m -XX:+ResizeTLAB -XX:+UseNUMA -XX:+AggressiveOpts" | cut -d: -f2-
答え2
それを渡す
sed 's/^[^:]*: *//'
このように置き換えると、sed
行の先頭から最初のスペースまでの:
すべての内容と最初のスペースを含む、その後のすべてのスペースが削除されます。
文字列がシェル変数に存在する$a
場合
printf -- '-%s\n' "${a#*-}"
これはパラメータ拡張を使用して、${parameter#word}
最初の項目までのすべての項目を削除します-
。ダッシュが再挿入されますprintf
。ほとんどの最新のシェルで実行されている場合は、外部ユーティリティを使用しません。
答え3
使用grep
:
grep -Po ':\K.*' infile
このアサーションは、印刷前に表示される最初のコロンより前の内容をすべて\K
無視します。: