我試圖在一個大的日誌文件的特定行替換文本少量(總共〜40條密耳的線)的文本固定量:替換一個大文件
sed -i '20000000s/.\{5\}$/zzzzz/' log_file
的目的這是用預期的唯一字符串「標記」一行,以便以後進行測試。
上述命令可以正常工作,但就地編輯sed
(和perl
)會創建一個臨時文件,其代價很高。
有沒有辦法在文件中替換固定數量的字符(即5個字符和5個其他字符),而無需創建一個臨時文件或一個非常大的緩衝區,該緩衝區會自動成爲臨時文件。
我試圖在一個大的日誌文件的特定行替換文本少量(總共〜40條密耳的線)的文本固定量:替換一個大文件
sed -i '20000000s/.\{5\}$/zzzzz/' log_file
的目的這是用預期的唯一字符串「標記」一行,以便以後進行測試。
上述命令可以正常工作,但就地編輯sed
(和perl
)會創建一個臨時文件,其代價很高。
有沒有辦法在文件中替換固定數量的字符(即5個字符和5個其他字符),而無需創建一個臨時文件或一個非常大的緩衝區,該緩衝區會自動成爲臨時文件。
你可以使用dd
替換一些字節的地方:
dd if=/dev/zero of=path/to/file bs=1 count=10 conv=notrunc skip=1000
會寫1000個字節後10個零(0×00)。您可以將任何要替換的文件放入文件中,並在if
參數中寫入路徑。然後,您必須將替換文件的大小插入count
參數,以便讀取整個文件。
conv=notrunc
參數告訴dd
使文件的末尾不被截斷。
這應該適用於任何1字節的文件編碼。
謝謝,我沒有想到用這個'dd'。但是這種方法的工作原理是設置跳過的字節數,而不是行。 – Alex 2012-04-11 16:54:46
你可以使用'head'和'wc'(以及一些算術)來計算字節偏移量 – 2012-04-11 18:12:59
剛剛拆分日誌文件(按天,周,月,年,十年,百年,嚴重程度,任務或其他) – KurzedMetal 2012-04-11 15:46:05