我试过了:
sed -i 's/n+/n/' file
但它不工作。
我仍然想要单行换行。
input:
Bash – replace斜线
如何在文件中search正则expression式,然后修改所有的事件?
在OS X上replacechmod –reference?
在不同用户的情况下在另一个shell脚本中运行一个shell脚本
abc def ghi jkl
期望的输出:
abc def ghi jkl
运行cmake时可能缺less库
如何用tr来代替' – 'string
如何比较两个目录的大小?
将stdout作为命令行util的文件名?
perl -00 -pe 1 filename
将输入文件分割成由两个或多个换行符分隔的“段落”,然后打印由单个空白行分隔的段落:
perl -00 -pe 1 <<END abc def ghi jkl END
abc def ghi jkl
使用awk(gnu或BSD)你可以这样做:
awk -v RS= -v ORS='nn' '1' file abc def ghi jkl
还使用perl :
perl -pe '$/=""; s/(n)+/$1$1/' file abc def ghi jkl
Sed不是很擅长以编程的方式检查多行的任务。 这是我能得到的最接近的:
$ sed '/^$/{n;/^$/d}' file abc def ghi jkl
这个逻辑:如果你找到一个空行,看看下一行。 如果下一行也是空白的,删除下一行。
这不会吞噬所有的线路,因为它假设有一个有意的额外的配对,并把两个nn降到两个n s。
要在基本awk做到这一点:
$ awk 'NF > 0 {blank=0} NF == 0 {blank++} blank < 2' file abc def ghi jkl
这使用了一个称为空白的变量,当字段数( NF )为非零时为零,当它为零时(一条空白行)增量。 当连续的空行数小于2时,Awk的默认行为是打印。
这给你什么你想单独使用sed:
sed '/^$/d' txt | sed -e $'s/$/\n/'
第二个sed命令在每行的末尾插入一个换行符。
这可能适用于你(GNU sed):
sed '/^$/{:a;N;s/n$//;ta}' file
这将用一个空白行替换多个空白行。
但是,如果您想在每个非空行之后放置一个空行,则:
sed '/^$/d;G' file
为什么不摆脱所有的空白行,然后在每行之后添加一个空行? 对于您指定的输入文件tmp ,
sed '/^$/d' tmp|sed '0~1 a ' abc def ghi jkl
如果空格(空格和制表符)被视为“空白”行,则使用sed '/^s*$/d' tmp|sed '0~1 a ' 。
请注意,这些解决方案确实在最后留下了空行,因为我不确定是否需要这样做。 轻松删除。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。