使用bash,sed或awk将三个或更多空行更改为两行

时间:2018-04-23 19:15:43

标签: bash awk sed

假设我们有包含单词和多个空行的字符串。例如

"1\n2\n\n3\n\n\n4\n\n\n\n2\n\n3\n\n\n1\n"

我想"收缩"三个或更多空行使用bash,sedawk来获取字符串

"1\n2\n\n3\n\n4\n\n2\n\n3\n\n1\n"

有人有想法吗?

3 个答案:

答案 0 :(得分:2)

awk

$ awk -v RS= -v ORS='\n\n' 1 file

答案 1 :(得分:1)

如果数据量太大且您有GNU sed,请使用sed -z使其在单个以空值终止的记录上工作,而不是一个\n - 终止记录每行:

sed -z 's/\n\n\n\n*/\n\n/g'

或者使用扩展的正则表达式:

sed -zr 's/\n{3,}/\n\n/g'

答案 2 :(得分:1)

如果perl可以接受,

perl -00 -lpe1

应该这样做。它读取并输出整个段落,其副作用是将2 +换行标准化为\n\n