这个脚本怎么写?(二)

        上一个脚本无法处理类似下面这样的:

这个标题也被不同程度的截断了,这里的脚本只适用这个特定的场景,如:

#!/bin/bash

input_file=$1
output_file=output_$1
current_line=""
previous_line=""
flag=true

if [ $# -ne 1 ]; then
    echo "Usage: $0 file_name"
    exit
fi


if [ -f "$output_file" ]; then
    rm "$output_file"
fi

cat $input_file | while read line
do
    current_line="$line"
    #查找以 |、 空白符、字母、空白符结尾
    if [[ "$line" =~ \|[[:space:]]*[a-z]*[[:space:]]{1,}+$ ]];then #这里包含了标题的判断
        flag=true
        previous_line=$(echo "$line" | sed -E 's/[[:space:]]+$//')
    elif [[ "$line" =~ \|[[:space:]]*[a-z]*\( ]];then #处理标题是以 "total(" 结尾的
        flag=true
        previous_line=$(echo "$line" | sed -E 's/[[:space:]]+$//')
    else
        if $flag ;then #下面主要是否加几个空格的判断
            if [[ "$previous_line" =~ [a-zA-Z]+$ ]];then
                current_line="$previous_line""$line"
            elif [[ "$previous_line" =~ [a-zA-Z]*\( ]];then
                current_line="$previous_line""$line"
            else
                current_line="$previous_line""    $line"
            fi  
        fi  
        flag=false
        echo "$current_line" >> "$output_file"  
    fi  
done

效果很好,完美解决! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值