Shell和文本操作:标记句子的末尾和控制段落之间的空格

时间:2014-01-11 16:12:03

标签: bash shell unix

处理后应该像

  I need to go london, after i reach the; Uk.

  But i need five hours? To reach it.

但我明白了:

 I need to go london, after i reach the; Uk.
 .
 .
 .
 But i need five hours? To reach it.

它有效,但它在第一行添加了一个点,但我需要在没有点的段落末尾添加点。另外,如果我有多个空白行,或者段落之间没有空行,我需要确保段落之间只有一个空行。

我如何处理这些问题?

2 个答案:

答案 0 :(得分:3)

您可以使用awk删除段落之间的空白行:

awk '{gsub(/\n\n+/,"\n\n");printf $0}' RS="^$" file

并且为了避免行开头的点,您可以将上一个sed命令更改为:

/\(^$\)\|\([!?;.,]\s*$\)/! s/\s*$/.&/

答案 1 :(得分:0)

您可以使用awk

awk '{if(NR == 1) print $0"\n"; else if($1 != ".") print $0}' file

您也可以从文件中read并使用echo -e将行间隔加倍:

n=0
while read f _ ; do
    ((n++))
    if [[ $f != . ]]; then
        if [ $n -eq 1 ]; then
            echo "$f\n"
        else
            echo -e "\n$f"
        fi
    fi
done < file