我對Perl不熟悉。我想知道什麼是運行這個效果:這個cat/tr/perl命令管道是做什麼的?
cat file_name | tr -d '\000' | perl -pi -e 's/[^\n\040-\176]/#/g' > new_file.out
我對Perl不熟悉。我想知道什麼是運行這個效果:這個cat/tr/perl命令管道是做什麼的?
cat file_name | tr -d '\000' | perl -pi -e 's/[^\n\040-\176]/#/g' > new_file.out
讀取文件名爲「FILE_NAME」,刪除所有符號\000
(空符號), 更換不\n
或\040-\0176
#
之間的所有符號,最後 結果寫入「new_file.out」
這做了兩兩件事:從文件
perl -pi
關注我,因爲-i
的意思是「就地修改輸入文件」,並且那裏沒有輸入文件。
我相信整個命令行可以通過刪除cat
和'TR,只是使用
perl -pe 's/[^\n\040-\176]/#/g' file_name > new_file.out
然後你就可以採取實際-i
開關的優勢,只是使用縮短
perl -p -i -e's/[^\n\040-\176]/#/g' file_name
和清理後的版本將存入文件file_name
。
如果你想爲安全的備份版本,改變-i
到-i.bak
,它將把新的內容file_name
並保留舊的file_name.bak
。
注意:我的版本不完全等效。見下面的評論。
確實。在刪除nul字符和用散列替換所有其他控制字符似乎沒有什麼意義。 – Borodin
這很好。我的版本*與原始版本不相同。在原始版本中,NUL將被刪除,但在我的版本中,它們將被'#'替代。 –
...無用,因爲所有這些都可以很容易地由Perl完成。 – tripleee
「無用」有點誇大了。比方說,它會比需要做更多的步驟。 –