クエリ出力を取得し、各行のスペースをドットに置き換えるシェルスクリプトを作成しています。
sql_query="SHOW STATS_HEALTHY WHERE Healthy < 90;"
echo "Running the SQL query..."
query_result=$(eval "$mysql_cmd")
if [ $? -eq 0 ]; then
echo "SQL query executed successfully. Output:"
selected_columns=$(echo "$query_result" | cut -f 1,2)
echo "Selected columns: $selected_columns"
#Tried below 2 is not expected output
echo $selected_columns | tr ' ' '.'
echo $selected_columns | sed 's/ /./g'
現在の出力:
次の3つを試すことは予想される結果ではありません。
echo $selected_columns | tr ' ' '.'
echo $selected_columns | sed 's/ /./g'
echo $selected_columns | sed 's/\s/./g'
期待される: クエリ出力を実行し、各行のスペースをドットに置き換えます。
期待される出力
loxxx.Vxxxx
loxxx.Vxxxx
loxxx.Gxxxx
loxxx.Gxxxx
loxxx.Gxxxx
解決策:
printf '%s\n' "$selected_columns" | sed 's/\s/./g'
答え1
echo $selected_columns
改行文字を空白に置き換えると、すべて1行に収まります。
この変数を引用すると、独自の改行も追加され、echo -n
echoは組み込み(シェルごとに異なる)または/ bin / echoになる可能性があるため、usingを使用することは廃止されました。
使用printf '%s\n' "$selected_columns"
ここで改行文字処理は論争の余地があります。それぞれは末尾の改行を削除するので、明示的に追加する必要があると$( ... )
思います。printf
印刷物を慎重に確認してください(od -t acx1
嘘をつかないでください)。