SHELL脚本中怎么删除连续多个空行却保留一个。

假如说一个配置文件中一行是一个配置属性。两个属性之间间隔1~N个不等的空行,显示不友好。怎么通过命令将这个配置文件的格式整理一下,将多个空行统一替换成一个空行。

试试这样:

sed '/^$/d' input | awk '{print $0"\n"}' >output

处理input文件。

首先用sed去掉所有空行,然后通过awk在逐行打印时再加上一个空行。

结果保存到output文件中。

追问

恩,可以实现每行都有一个空行,但之前没有空行的地方(注释)也被空行隔开了。
可能我的预期结果不是每行都有空行,只是想把原来是多个空行的地方变成一个空行。不知道有没有办法。

追答awk 'BEGIN{b=0} {if($0==""){b=1;next;} if(b){print "\n"$0;b=0;}else print;}' input >output

下面的sed方法也可以:

sed -rn 'h;n;:a;H;n;$!ba;g;s/(\n){2,}/\n\n/g;p' input >output

不过感觉还是awk方法更容易理解些,不用记那么多命令。

 

用sed的好处就是可以直接修改原文件(in-place edit),像下面这样加个-i 选项即可。

sed -rni 'h;n;:a;H;n;$!ba;g;s/(\n){2,}/\n\n/g;p' input

温馨提示:内容为网友见解,仅供参考
无其他回答

SHELL脚本中怎么删除连续多个空行却保留一个。
首先用sed去掉所有空行,然后通过awk在逐行打印时再加上一个空行。结果保存到output文件中。

如何用shell脚本删除文件中的空行
可以通过sed命令,将空行和注释行删除掉。1、以下面的文档内容为例,#号开头的是注释,然后有很多空行,文档名为1.tt。2、执行如下命令 sed '\/^#.*\\|^$\/d' 1.tt说明:^#.*说明以#字符开头的行,^$表示手空行,中间的\\|是转义,表示或。d表示删除。

shell脚本里怎么去掉其中两行注释并保存退出
试试这样: sed '\/^$\/d' input | awk '{print $0"\\n"}' >output处理input文件。 首先用sed去掉所有空行,然后通过awk在逐行打印时再加上一个空行。 结果保存到output文件中。

如何用 PowerShell 分割文本文件,以空行分割?几个空行算一个。_百度...
if($_){$_ "ps$i`.txt"}else{$i++} } 按内容和id修改文件名(因为有重名的所以加了id)dir |?{$_.name -match 'ps\\d+\\.txt'}|%{ newname=((gc $_)[1].split(":")[1]).Trim()id=((gc $_)[14].split(":")[1]).Trim()Rename-Item $_ ($newname + $id+ ".tx...

shell sed 如何删除多余的空行
回答:恩,楼上的可以删除由回车形成的空行,但是如果由空格形成的空行就没法删除了。 #sed -i '\/^ *$\/d' file 这个可以删除由空格组成的空行,也包括由回车组成的空行。

在powershell中怎么去除一个txt里面的空格和空行
foreach ($i in Get-Content Groupname.txt){ if($i){Get-ADGroupMember "$i" -Recursive | select SamAccountName >M:\\$i.txt} } 这样就应该没有空行了。至于空格 $i=$i.Trim()这样就去掉了。

如何用 PowerShell 分割文本文件,以空行分割?几个空行算一个。
if($_){$_ >>"ps$i`.txt"}else{$i++} } 按内容和id修改文件名(因为有重名的所以加了id)dir |?{$_.name -match 'ps\\d+\\.txt'}|%{ newname=((gc $_)[1].split(":")[1]).Trim()id=((gc $_)[14].split(":")[1]).Trim()Rename-Item $_ ($newname + $id+ "...

...删除文本文件中多余回车或提取文本中前两行数据的shell脚本,请...
这样删除空行,grep -E -v '^[\\t\\n ]*$' file > outfile 用脚本批量改,在该目录下放入这脚本 ! \/bin\/bash for i in *.txt # 假设副档为 .txt do grep -E -v '^[\\t\\n ]*$' "$i" > "$i".bak ret=$?if [ $ret -eq 0 ]then mv -f "$i" "$i".temp mv -f "...

在shell中,如何输出一个空行
不同的shell,输出空行的方法是不同的,KSH:echo \\\\n echo "\\n"echo -e "\\n"BASH:echo -e "\\n"TCSH:没-e选项 echo \\\\n echo "\\n"

在shell编程命令中,换行符号是什么?
可以用以下命令删除三行空行::%s\/^\\n\\{3}\/\/可以用以下命令将连续的两个空行替换成一个空行::%s\/\\n\\n\/\\r\/g自动换行在默认情况下,Vim是不会自动换行的,也就是说我们需要自己决定回车的位置。但是我们也可以通过指定textwidth选项,让Vim自动在指定位置换行。例如,使用以下命令指定在30列时自动换行。由于在遇到...

相似回答