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개행 문자를 공백으로 바꾸면 모두 한 줄에 들어갈 수 있습니다.

이 변수를 인용하면 자체적으로 추가 줄 바꿈도 추가되며, echo -necho는 내장(쉘마다 다름) 또는 /bin/echo일 수 있으므로 using을 사용하는 것은 더 이상 사용되지 않습니다.

사용printf '%s\n' "$selected_columns"

여기서 개행 문자 처리는 논란의 여지가 있습니다. 각각은 후행 줄 바꿈을 제거하므로 명시적으로 추가해야 한다고 $( ... )생각합니다 . printf출력물을 주의 깊게 확인하십시오( od -t acx1거짓말을 하지 마십시오).

관련 정보