Chinaunix

标题: 请教一个文本处理的问题 [打印本页]

作者: 忧郁的葡萄    时间: 2007-12-04 11:26
标题: 请教一个文本处理的问题
我需要找到含有特定字符的一段文字,然后把整段文字去掉,
举个例子:cat test.txt
{
    1
    2
}
{
    3
    4
}
{
    5
    6
}
然后我需要把含有3的{}里的内容去掉,即剩下
cat text.txt
{
    1
    2
}
{
    5
    6
}
改怎么作呀
作者: springwind426    时间: 2007-12-04 11:32

  1. awk  'BEGIN{RS="}"}!/3/&&RT{print $0 "}"}' a.txt
复制代码

作者: 忧郁的葡萄    时间: 2007-12-04 13:47
后面这段看不懂,RT是啥意思?
作者: springwind426    时间: 2007-12-04 13:56
RT表示当前行的行分隔符

因为 RS可以是  正则表达式,因此,可能每行的行分隔符都不一样,因此,用RT可以来获取当前的行分隔符
作者: BLZer    时间: 2007-12-04 14:24
原帖由 忧郁的葡萄 于 2007-12-4 11:26 发表
我需要找到含有特定字符的一段文字,然后把整段文字去掉,
举个例子:cat test.txt
{
    1
    2
}
{
    3
    4
}
{
    5
    6
}
然后我需要把含有3的{}里的内容去掉,即剩下
cat text.txt ...

|sed -n '/{/{:a;$!N;/}/!ba;/3/!p}'
作者: 忧郁的葡萄    时间: 2007-12-04 14:25
awk  'BEGIN{RS="}"}!/3/{print $0 "}"}' a.txt
我这样好像也可以啊
作者: seeLnd    时间: 2007-12-04 14:55
呵呵,对awk不是很熟,首次看见RT的用法,学习了,

现在感觉awk只能对分割符作描述,
可以对数据块特征作描述吗,
也就是说用数据本身包含的内容特征来进行分割,用不着分割符.

以下我的写法是用分割符来模拟数据块

awk 'BEGIN{RS="{[^{}]*}"} RT!~/3/{print RT}' test.txt

[ 本帖最后由 seeLnd 于 2007-12-4 15:05 编辑 ]
作者: zyw_unix    时间: 2007-12-05 09:12
弱弱的问
{print $0 "}" } 是什么意思啊?
“}”  什么意思啊?
作者: waker    时间: 2007-12-05 09:25
标题: 回复 #8 zyw_unix 的帖子
字串}
作者: 忧郁的葡萄    时间: 2008-04-28 05:26
假如去掉3这一段,这个3是个变量怎么办
NUMBER=3
awk  'BEGIN{RS="}"}!/$NUMBER/{print $0 "}"}' a.txt
awk  “BEGIN{RS=\"}\"}!/$NUMBER/{print $0 \"}\"}' a.txt
这样都不行哦
作者: 忧郁的葡萄    时间: 2008-04-28 20:02
顶下!
作者: waker    时间: 2008-04-28 20:05
原帖由 忧郁的葡萄 于 2008-4-28 20:02 发表
顶下!

http://bbs.chinaunix.net/viewthr ... p;page=2#pid3647979




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2