Linuxは各行の空白のみのドットに置き換えます。

Linuxは各行の空白のみのドットに置き換えます。

クエリ出力を取得し、各行のスペースをドットに置き換えるシェルスクリプトを作成しています。

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 -nechoは組み込み(シェルごとに異なる)または/ bin / echoになる可能性があるため、usingを使用することは廃止されました。

使用printf '%s\n' "$selected_columns"

ここで改行文字処理は論争の余地があります。それぞれは末尾の改行を削除するので、明示的に追加する必要があると$( ... )思います。printf印刷物を慎重に確認してください(od -t acx1嘘をつかないでください)。

関連情報