Sed

如果長於 XY,如何刪除線?

  • February 19, 2022

如果一行長於例如:2048 個字元,我該如何刪除它?

sed '/^.\{2048\}./d' input.txt > output.txt

這是一個刪除具有 2049 個或更多字元的行的解決方案:

sed '/.\{2049\}/d' <file.in >file.out

正則表達式.\{2049\}將匹配包含 2049 個字元的子字元串的任何行(另一種說法是“至少 2049 個字元”)。該d命令從輸入中刪除它們,在輸出中只產生較短的行。

BSD sed(在例如 macOS 上)只能在運算符中處理高達 256 的重複計數(在 shell中查看 ;\{...\}的值)。在這些系統上,您可以改為使用:RE_DUP_MAX``getconf RE_DUP_MAX``awk

awk 'length <= 2048' <file.in >file.out

從字面上模仿sed解決方案awk

awk 'length >= 2049 { next } { print }' <file.in >file.out

請注意,任何awk實現只能保證能夠處理長度為LINE_MAX字節的記錄(請參閱getconf LINE_MAXshell),但可能支持更長的記錄。在 macOS 上,LINE_MAX是 2048。

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