从使用sed或awk区分案例的文本文件中提取字符串

时间:2016-11-22 11:39:02

标签: bash awk sed

我在形态上分析了这种形式的文件:

^Thus/Thus[ADV]+ADV$ ^an/an[ART]$ ^agnostic/agnostic[ADJ]+ADJ$ 
^is/be[V]+V+3sg+PRES$ ^someone/someone[PN]+INDEF$ ^who/who[PN]+WH$ 
^believes/believe[V]+V+3sg+PRES$ ^that/that[CNJ]+THAT$ ^we/we[PN]+PERS$ 
^do/do[V]+V+INF$ ^not/not[PART]$ ^and/and[CNJ]+COORD$ ^cannot/*cannot$ 
^know/know[V]+V$ ^for/for[PRP]$
^prove/prove[V]+V+INF$ ^that/that[CNJ]+THAT$ ^he/he[PN]+PERS$     
^doesn/*doesn$^'t/it[PN]+PERS$ ^exist/exist[V]+V+INF$
^I'/i'[V]+V$^ve/ve[V]+V+INF$
^didn/didn[V]+V$^'t/it[PN]+PERS$
^can/can[V]+V+INF$^'t/it[PN]+PERS$

(案例1)大多数单词都得到了正确的分析,例如:

is --> ^is/be[V]+V+3sg+PRES$

(案例2)有些词语无法识别,例如:

cannot --> ^cannot/*cannot$

(案例3)并且所有“连接”的单词(不会,不能......)得到这样的处理:

doesn't --> ^doesn/*doesn$^'t/it[PN]+PERS$
I've --> ^I'/i'[V]+V$^ve/ve[V]+V+INF$
didn't --> ^didn/didn[V]+V$^'t/it[PN]+PERS$
can't --> ^can/can[V]+V+INF$^'t/it[PN]+PERS$

我想创建一个包含以下内容的新文档:

  • Case1
  • /[之间的字词
  • Case2的^/*$之间的字
  • for Case3我不确定我想要什么,因为处理过的表单大部分时间都很糟糕(从语言学的角度来看)。我想在^和{{1}之间开始我大部分时间都会从奇怪的单词中知道它来自哪里......

所以有些sed awk(我知道的只有两个,如果可能的话会很高兴)脚本,它将所有字符串拆分为分析单元,然后将其作为标准处理Case1。如果字符串包含像Case3这样的单个qoute /进程,并且它包含类似Case2的星'。订单很重要,因为有些案例包含**,因此应该应用Case3。

我完全不知道如何开始这个,所以我没有代码让你开始..

欢迎对Case3提出其他建议。

希望有人可以帮忙!

提前致谢。

修改

所以看起来应该是这样的:

'

2 个答案:

答案 0 :(得分:0)

如果您总是选择^/之间的字词:

$ awk 'gsub(/\^|\/[^\$]+\$/,"")' foo
Thus an agnostic
is someone who
believes that we
do not and cannot
know for
prove that he
doesn't exist
I've
didn't
can't

答案 1 :(得分:0)

使用sed,我想你可以这样做:

sed -r "s#[^/]+/\*?(\w+'?)\S*\\$ ?#\1 #g" foo