Bash - 줄 사이의 공백을 무시하고 한 줄씩 에코합니다.

Bash - 줄 사이의 공백을 무시하고 한 줄씩 에코합니다.

나는 다음 게시물을 읽었습니다. bash - 공백을 새 줄로 바꿉니다., 하지만 이것은 내 문제를 해결하는 데 도움이 되지 않습니다.

   [My Directory]

[root@testlabs Config]# ls 
Archive Backup_Files
config_file.tgz
hostname1-config.uac
hostname2-config.uac
hostname3-config.uac
My-config_17Oct2014.tgz
non_extension-config_file1
non_extension-config_file2
[root@testlabs Config]#

파일의 MD5 체크섬 결과 목록을 에코해야 합니다. 다음을 수행하여 이 작업을 수행할 수 있습니다.

##IDENTIFY MD5 CHECKSUM##

 //To output the md5sum of the original file with a correct format to a temp file [md5<space><space>file_name]
ls $FULL_FILE_NAME | md5sum  $FULL_FILE_NAME > /tmp/md5sum.tmp

//To compare the md5sum of the orignal file with the md5sum of the backup copies in the archive directory
ls $CONFIG_ARCHIVE_DIR | grep -i --text $CONFIG_FILE_HOSTNAME-$FILE_TIMESTAMP.tgz | md5sum -c /tmp/md5sum.tmp >> /tmp/md5sum2.tmp

##COMPARING MD5 CHECKSUM##

 if [ -s /tmp/md5sum2.tmp ];
 then
   echo ""
   echo "Comparison of MD5 for files archived:"
   echo '---------------------------------------'
   /bin/sort -d /tmp/md5sum2.tmp
 fi

실행 시 결과는 다음과 같습니다. (/tmp/md5sum2.tmp의 내용을 에코합니다.)

Comparison of MD5 for files archived:
---------------------------------------
 config_file.tgz: OK
 hostname1-config.uac: OK
 hostname2-config.uac: OK
 hostname3-config.uac: OK
 My-config_17Oct2014.tgz: OK
 non_extension-config_file1: OK
 non_extension-config_file1: OK

##구함##

하지만 결과를 다음과 같이 표시하고 싶습니다.

Comparison of MD5 for files archived:
---------------------------------------
 - config_file.tgz: OK
 - hostname1-config.uac: OK
 - hostname2-config.uac: OK
 - hostname3-config.uac: OK
 - My-config_17Oct2014.tgz: OK
 - non_extension-config_file1: OK
 - non_extension-config_file2: OK


나는 이것을 시도했습니다. (/tmp/md5sum2.tmp의 내용을 /tmp/md5sum3.tmp에 에코하고 앞에 "-"가 붙습니다)

1)

 ##COMPARING MD5 CHECKSUM##

  if [ -s /tmp/md5sum2.tmp ];
  then
  echo ""
  echo "Comparison of MD5 for files archived:"
  echo '---------------------------------------'
  /bin/sort -d /tmp/md5sum2.tmp

  for CONFIG_FILES in `/bin/cat /tmp/md5sum2.tmp`
  do
/bin/sort -d /tmp/md5sum2.tmp | grep $CONFIG_FILES > /tmp/md5sum3.tmp
  done

  for MD5_COMPARE in $(/bin/sort -d /tmp/md5sum3.tmp)
  do
   echo -e " - $MD5_COMPARE\n"
  done
 fi

결과 1)

Comparison of MD5 for files archived:
 ---------------------------------------
 - config_file.tgz:
 - OK
 - hostname1-config.uac:
 - OK
 - hostname2-config.uac:
 - OK
 - hostname3-config.uac:
 - OK
 - My-config_17Oct2014.tgz.tgz:
 - OK
 - non_extension-config_file1:
 - OK
 - non_extension-config_file2:
 - OK

2)

for MD5_COMPARE in $(/bin/sort -d /tmp/md5sum3.tmp)

  do
  echo -n " - $MD5_COMPARE"
  done

결과 2)

  Comparison of MD5 for files archived:
  ---------------------------------------
- config_file.tgz: - OK - hostname1-config.uac: - OK - hostname2-config.uac: - OK - 
  hostname3-config.uac: - OK - My-config_17Oct2014.tgz: - OK - non_extension-config_file1: -
OK - non_extension-config_file2: - OK

답변1

파일을 한 줄씩 읽는 표준 절차는 다음과 같습니다.

while IFS= read -r MD5_COMPARE
do
  echo "- $MD5_COMPARE"
done < /tmp/md5sum2.tmp | /bin/sort -d

하지만 sed그것도 작동해야합니다

/bin/sort -d /tmp/md5sum2.tmp | sed 's/^/ -/'

답변2

출력을 에서 다음으로 파이프 sort하면 sed됩니다 -.

if [ -s /tmp/md5sum2.tmp ];
then
        echo ""
        echo "Comparison of MD5 for files archived:"
        echo '---------------------------------------'
        /bin/sort -d /tmp/md5sum2.tmp | sed 's/\(^ *\) \( [^ ]\)/\1-\2/'
fi

결과:

Comparison of MD5 for files archived:
---------------------------------------
    - My-config_17Oct2014.tgz: OK
    - config_file.tgz: OK
    - hostname1-config.uac: OK
    - hostname2-config.uac: OK
    - hostname3-config.uac: OK
    - non_extension-config_file1: OK
    - non_extension-config_file1: OK

관련 정보