如何在文件中将2个新行替换为1

时间:2014-03-14 09:43:14

标签: bash shell sed awk ash

我有以下文本文件

config 'toto'
        option 
        option 

config 'titi'
        list 
        list 

config 'tutu'
        list 
        list 

当我使用cat显示文件时,我想将每两条新行替换为一条。

我尝试了以下命令,但他们没有工作

cat file | sed -e "s@$'\n'$'\n'@$'\n'@g"
cat file | sed -e "s@\n\n@\n@g"

预期的输出是这样的:

config 'toto'
        option 
        option 
config 'titi'
        list 
        list 
config 'tutu'
        list 
        list 

5 个答案:

答案 0 :(得分:3)

使用sed

$ sed '/^$/d' foo.txt
config 'toto'
        option
        option
config 'titi'
        list
        list
config 'tutu'
        list
        list

如果空行包含空格,则可以使用

$ sed '/^\s*$/d' foo.txt

$ sed '/^[[:space:]]*$/d' foo.txt

也可以过滤掉它们。

使用awk

$ awk '!/^[[:space:]]*$/' foo.txt

使用grep

$ grep -v '^[[:space:]]*$' foo.txt

答案 1 :(得分:3)

使用sed

sed '/^$/d' file

<强>(OR)

sed '/^[ ]*$/d' file

使用tr

tr -s '\n' < file

答案 2 :(得分:1)

微小的awk

awk 'NF' file

$ cat file
config 'toto'
        option 
        option 

config 'titi'
        list 
        list 

config 'tutu'
        list 
        list 

$ awk 'NF' file
config 'toto'
        option 
        option 
config 'titi'
        list 
        list 
config 'tutu'
        list 
        list 

答案 3 :(得分:0)

egrep -v '^ *$' YourFile

应该比sed快

答案 4 :(得分:-1)

您可以使用Bash while read循环。

while IFS='' read line; do
    if [ -z "$line" ]; then
        continue
    else
        echo "$line"
    fi
done < file

这里,循环将打印不是空字符串的每一行。