쿼리 출력을 얻고 각 줄의 공백을 점으로 바꾸는 쉘 스크립트를 작성 중입니다.
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
echo는 내장(쉘마다 다름) 또는 /bin/echo일 수 있으므로 using을 사용하는 것은 더 이상 사용되지 않습니다.
사용printf '%s\n' "$selected_columns"
여기서 개행 문자 처리는 논란의 여지가 있습니다. 각각은 후행 줄 바꿈을 제거하므로 명시적으로 추가해야 한다고 $( ... )
생각합니다 . printf
출력물을 주의 깊게 확인하십시오( od -t acx1
거짓말을 하지 마십시오).