免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5506 | 回复: 11
打印 上一主题 下一主题

求助:这种配置文件如何用shell自动修改 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-14 16:51 |只看该作者 |倒序浏览
本帖最后由 cutecactus 于 2010-05-14 16:53 编辑

我们终端上有这么一个配置文件/etc/gotlib.conf,配置内容如下:(类似如下,注意红字字体)
[printer]
#type=tsp700 tsp1000 tsp7002d ul280
type=tsp700

#interface=parport, serial, usb
interface=serial

#devname=/dev/lp0  /dev/ttyS2
devname=/dev/ttyS2

#attr=19200,8,1,N,n
attr=19200,8,1,N,n

#markvalid=1  1-valid 0-invalid
markvalid=1

#markcolumns=26, 26-small mark, 12-big mark
markcolumns=26

[scanner]
#type=a4ocr ocr
type=ocr
#interface=serial usb
interface=serial
devname=/dev/ttyS0
attr=115200, 8, 1, n, n


[ups]
# type= vct86 vct87 dummy yunhai
type=PCM
devname=/dev/ttyS3
attr=1200, 8, 1, n, n

有些终端的配置是如下配置:(注意如下红色字体)
[printer]
#type=tsp700 tsp1000 tsp7002d ul280
type=tsp700

#interface=parport, serial, usb
interface=serial

#devname=/dev/lp0  /dev/ttyS2
devname=/dev/ttyS2

#attr=19200,8,1,N,n
attr=19200,8,1,N,n

#markvalid=1  1-valid 0-invalid
markvalid=1

#markcolumns=26, 26-small mark, 12-big mark
markcolumns=26

[scanner]
devname=/dev/ttyS0
attr=115200, 8, 1, n, n


[ups]
# type= vct86 vct87 dummy yunhai
type=PCM
devname=/dev/ttyS3
attr=1200, 8, 1, n, n

[cdu]
type=dummy
#devname=/dev/ttyS3
#attr=9600,8,1,n,n

问题:我如何将gotlib.conf中的[scanner]项统一为:
[scanner]
#type=a4ocr ocr
type=ocr
#interface=serial usb
interface=serial
devname=/dev/ttyS0
attr=115200, 8, 1, n, n

论坛徽章:
0
2 [报告]
发表于 2010-05-14 16:53 |只看该作者
把好使的复制过去 覆盖。。。。。。。。

论坛徽章:
0
3 [报告]
发表于 2010-05-14 17:11 |只看该作者
  1. awk 'BEGIN{RS=ORS="\n\n"}/scanner/{$0=.........}1' 文本
复制代码
....就是修改后的东东

论坛徽章:
0
4 [报告]
发表于 2010-05-14 17:24 |只看该作者
回复 2# lkk2003rty


    不好意思。忘记交代了,其它项不能动的,那些数据是用户自定义数据,如:
markcolumns=26
有些用户值是markcolumns=12,我们不清楚用户是如何配置的,程序只能动[scanner]节的内容。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2010-05-14 17:26 |只看该作者
scanner节后面跟的都是ups就比较好办了

论坛徽章:
0
6 [报告]
发表于 2010-05-14 17:42 |只看该作者
回复 3# where27


不成,执行:awk 'BEGIN{RS=ORS="\n\n"}/\[scanner\]/{$0="[scanner]\n123123\n456=123"}1' gotlib.conf
出来这个:
[printer]
#type=tsp700 tsp1000 tsp7002d ul280
type=tsp700

#interface=parport, serial, usb
interface=serial

#devname=/dev/lp0  /dev/ttyS2
devname=/dev/ttyS2

#attr=19200,8,1,N,n
attr=19200,8,1,N,n

#markvalid=1  1-valid 0-invalid
markvalid=1

[scanner]
123123
456=123

原文件中的如下内容没有了:
[ups]
# type= vct86 vct87 dummy yunhai
type=PCM
devname=/dev/ttyS3
attr=1200, 8, 1, n, n

[cdu]
type=dummy
#devname=/dev/ttyS3
#attr=9600,8,1,n,n

论坛徽章:
0
7 [报告]
发表于 2010-05-14 17:43 |只看该作者
回复 5# 昭襄王


    如果是那样,一个sed就很好处理。[scanner]后面不确定是什么值。

论坛徽章:
0
8 [报告]
发表于 2010-05-14 17:45 |只看该作者
本帖最后由 cutecactus 于 2010-05-14 17:52 编辑

我刚用最笨的方法,写了一个shell大家不要笑,本人是那种笨鸟先飞型)

#!/bin/bash
GOTLIB=/etc/gotlib.conf
[ ! -f $GOTLIB.save ] && cp $GOTLIB $GOTLIB.save --reply=yes
LINE=$(sed -n '/^\[scanner\]/=' $GOTLIB)
ALLLINE=$(wc -l /etc/gotlib.conf|awk '{print $1}')
echo "begin line: $LINE"
if ! echo $LINE|grep "[0-9]*[0-9]" -q ; then
        if [ A"$(tail -n 1 $GOTLIB)" != A ]; then
                echo "" >>$GOTLIB
        fi
        echo -e "[scanner]" >>$GOTLIB
        echo -e "#type=a4ocr ocr" >>$GOTLIB
        echo -e "type=ocr" >>$GOTLIB
        echo -e "#interface=serial usb" >>$GOTLIB
        echo -e "interface=serial" >>$GOTLIB
        echo -e "devname=/dev/ttyS0" >>$GOTLIB
        echo -e "attr=115200, 8, 1, n, n" >>$GOTLIB
        exit 0
fi
cp $GOTLIB $GOTLIB.bak --reply=yes
let LASTLINE=$LINE+1
while [ 0 = 0 ]
do
        if sed -n ${LASTLINE}p $GOTLIB.bak|grep -v "^#"|grep "^\[" -q ; then
                let LASTLINE=$LASTLINE-1
                break
        else
                let LASTLINE=$LASTLINE+1
                if [ $LASTLINE -ge $ALLLINE ]; then
                        break
                fi
        fi
done
echo "last line: $LASTLINE"
echo "all lineALLLINE"

sed -i ${LINE},${LASTLINE}d $GOTLIB.bak
cat >>$GOTLIB.bak <<EOF
[scanner]
#type=a4ocr ocr
type=ocr
#interface=serial usb
interface=serial
devname=/dev/ttyS0
attr=115200, 8, 1, n, n
EOF
cp $GOTLIB.bak $GOTLIB --reply=yes
rm -f  $GOTLIB.bak
unset LINE LASTLINE ALLLINE
exit 0

论坛徽章:
0
9 [报告]
发表于 2010-05-14 18:04 |只看该作者
回复 6# cutecactus


    怎么会没有呢,命令指示替换了[scanner]那一段,其他的都不变的,我试了都可以

论坛徽章:
0
10 [报告]
发表于 2010-05-14 18:10 |只看该作者
前面的awk有问题?
或许又是没有对文件执行dos2unix的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP