我有一个空行很多的文件。
在一起2个或更多时如何删除它们。
我尝试了sed "s/\n\n//"
文件,但是没有用。没错
我有一个空行很多的文件。
在一起2个或更多时如何删除它们。
我尝试了sed "s/\n\n//"
文件,但是没有用。没错
Answers:
只是为了删除空行:
sed '/^$/d'
sed
它是面向行的,因此根据“一个特定字节的2个或多个”来进行思考是可行的,除非该字节是换行符。然后,您必须考虑一些适用于整个生产线的东西。
sed
能够通过其“样式空间” /“保留空间”功能处理多行。但是我觉得那太复杂了。;-)
1!
(匹配第1行以外的所有字符),因此:sed '1!{/^$/d'}
。
sed
。创建文件实际上将删除任何具有相同名称的现有文件。 sed '/^&/d' file.txt > otherfile.txt
将工作。
不需要sed
。grep
会做:
grep .
(即grep
,SPC,点,与包含至少一个字符的任何行匹配)。
还有:
tr -s '\n'
(将换行符的任何序列压缩为一个)。
正如Chris所指出的,两者都不相等,因为删除空行(例如上面的第一个解决方案,以及大多数其他答案都集中在此处)与在第一行为空的情况下按要求挤压换行符序列不同。只需要一个换行符就可以使第一行为空。
看到@Bruce Ediger的答案很 sed
并不是最好的工具,因为它是基于行的,并且被视为\n
行尾字符,因此变得很复杂。sed
可能是完成此工作的理想工具,不过,这里还有其他一些选择:
佩尔
perl -ne 'print if /./' file.txt
要么
perl -pe '$/=""; s/\n+/\n/;' file.txt
$ /
输入记录分隔符,默认为换行符。这影响了Perl关于“线”的概念。就像awk的RS变量一样工作,包括如果将空行设置为null字符串(空行不能包含任何空格或制表符),则将空行视为终止符。您可以将其设置为多字符字符串以匹配多字符终止符,或者将其设置为undef以通读文件末尾。如果文件包含连续的空行,则将其设置为“ \ n \ n”意味着与设置为“”稍有不同。设置为“”会将两个或多个连续的空行视为单个空行。设置为“ \ n \ n”将盲目假定下一个输入字符属于下一段,即使它是换行符也是如此。
高克
awk '$1' file.txt
这将适用于发布的示例,但正如@Stephane Chazelas指出的那样,它还将删除第一个字段为“ looks like”的行0
。这更可靠:
awk NF file.txt
perl -pe 's/\n+/\n/ file.txt
将这样做,输入记录分隔符与此无关。
perl -pe
或perl -ne
逐行工作。\n+
永远不会匹配,因为它仅应用于一行。这就是为什么你需要任一组$/
或使用-0
TI发出声音文件的整体:perl -0pe 's/\n+/\n/' file
。
对于大多数这些答案,首先必须删除尾随空格。删除加倍的换行符将删除所有空白行。(考虑一下)。
从字面上看,OP希望“如果有重复的空白行,则从文件中删除所有空白行”。
典型的用户想要“仅删除重复的空白行”。
为此,请先除去结尾的whitepace,然后通过cat -s进行管道传输
sed s/[[:space:]]*$// | cat -s
但这不会删除多余的前导或尾随空白行。
尝试同时sed -e 's#\\n\\n#\\n#g' input.file > output.file
使用/
字段分隔符和正则表达式的一部分,这可能是问题所在。