帮助正则表达式 - 提取文本

假设我有一些类似的文本文件(f1.txt,f2.txt,...)
@article {paper1,
author = {some author},
title = {some {T}itle} ,
journal = {journal},
volume = {16},
number = {4},
publisher = {John Wiley & Sons, Ltd.},
issn = {some number},
url = {some url},
doi = {some number},
pages = {1},
year = {1997},
}
我想提取标题的内容并将其存储在一个bash变量(称为$ title)中,即示例中的“some {T} itle”。请注意,第一组括号中可能有花括号。此外,“=”周围可能没有空格,并且“标题”之前可能有更多的空格。 非常感谢。我只需要一个如何提取这个的工作示例,我可以提取其他东西。     
已邀请:

bab

尝试一下:
title=$(sed -n '/^[[:blank:]]*title[[:blank:]]*=[[:blank:]]*{/ {s///; s/}[^}]*$//p}' inputfile)
说明:
/^[[:blank:]]*title[[:blank:]]*=[[:blank:]]*{/ {
- 如果一行符合此正则表达式
s///
- 删除匹配的部分
s/}[^}]*$//p
- 删除最后一个结束大括号和每个不是结束大括号的字符,直到行结束并打印
}
- 结束如果     
title=$(sed -n '/title *=/{s/^[^{]*{([^,]*),.*$/1/;s/} *$//p}' ./f1.txt)
/title *=/
:仅对在任意数量的空格后面带有'title'后跟'='的行进行操作
s/^[^{]*{([^,]*),.*$/1/
:从该行的开头查找第一个'{'字符。从那时起保存你找到的所有内容,直到你点击逗号','。用您保存的所有内容替换整行
s/} *$//p
:将任意空格剥去尾随'}'并打印结果。
title=$(sed -n ... )
:将上述3个步骤的结果保存在名为
title
的bash变量中     
肯定有更优雅的方式,但凌晨2:40:
title=`cat test | grep "^s*titles*=s*" | sed 's/^s*titles*=s*{?//' | sed 's/}?s*,s*$//'`
Grep为我们感兴趣的线条,剥离所有内容,包括开头卷曲,然后剥离从最后一卷到最后一行的所有内容     

要回复问题请先登录注册