Bash
Bash - 逐行回顯,忽略行之間的空間
我已經閱讀了以下文章: 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/^/ -/'
只需通過管道將輸出從
sort
tosed
替換為一個空格-
: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