Bash

Bash - 逐行回顯,忽略行之間的空間

  • August 13, 2015

我已經閱讀了以下文章: bash - replace space with new line,但它無助於解決我的問題。

  [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 中,前面帶有“-”)

##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
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

逐行讀取文件的標準程序是

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/^/ -/'

只需通過管道將輸出從sorttosed替換為一個空格-

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

引用自:https://unix.stackexchange.com/questions/167928