Linux 仅将每行的空格替换为点

Linux 仅将每行的空格替换为点

我正在编写一个 shellscript 来获取查询输出并将每行的空格替换为点

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用空格替换换行符,使其全部成为一行。

引用该变量还将添加自己的额外换行符,并且echo -n不推荐使用 using ,因为 echo 可能是内置的(在 shell 之间有所不同)或 /bin/echo。

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

这里对换行符的处理是有争议的。每个$( ... )都会删除尾随换行符,因此我认为printf需要显式添加一个。仔细验证你的输出(od -t acx1永远不会对你撒谎)。

相关内容