我正在编写一个 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
永远不会对你撒谎)。