读取文件并将任意值存储到bash脚本中的变量中

时间:2011-09-30 22:29:29

标签: bash file-io

我是bash脚本的新手,我很难弄清楚这个问题。我有大约200个遵循这种模式的文件:

ANÁLISE DA GLOSA FUNGICIDA
A ANÁLISE RESULTA EM:
S='Glosa02626354' = "agente que destrói ou previne o crescimento de fungos"
    {antifúngico: O I]antifúngico clássico utilizado no tratamento não previne a disseminação típica da infecção.,
    agente antifúngico: Os resultados sugerem a utilização terapêutica do extrato do limão como I]agente antifúngico na Odontologia.,
    fungicida: A duração do ]fungicida no carpete tem garantia de cinco anos.,
    antimicótico: Os grupos nomearam o I]antimicótico e realizaram campanha de lançamento fictícia, com material técnico de divulgação e brindes.,
    agente antimicótico: Em caso de infecção, deverá ser instituído o uso de um I]agente antimicótico.}

Chave: FUNGICIDA <noun.artifact> 
ILI: 02626354
Sense 1
{02626354} <noun.artifact> antifungal, antifungal agent, fungicide, antimycotic, antimycotic agent -- (any agent that destroys or prevents the growth of fungi)
       => {13935705} <noun.substance> agent -- (a substance that exerts some force or effect)
           => {00005598} <noun.Tops> causal agent, cause, causal agency -- (any entity that causes events to happen)
               => {00001740} <noun.Tops> entity -- (that which is perceived or known or inferred to have its own distinct existence (living or nonliving))

在这种情况下,我必须在大括号之间存储以下值:'antifúngico','agenteantifúngico','fungicida','antimicótico'和'agenteantimicótico'在一个变量中。这些词当然会在每个文件中都有所不同。为了比较,这是另一个文件:

ANÁLISE DA GLOSA VIA ÁPIA
A ANÁLISE RESULTA EM:
S='Glosa02634922' = "estrada da antiga Roma, na Itália, extendendo-se ao sul, de Roma a Brindisi; iniciada em 312 AC"
    {Via Ápia: Toda a I]Via Apia era conhecida quer pela sua extensão, quer pela sua extraordinária beleza.}

Chave: VIA ÁPIA <noun.artifact>
ILI: 02634922 
Sense 1
{02634922} <noun.artifact> Appian Way#1 -- (an ancient Roman road in Italy extending south from Rome to Brindisi; begun in 312 BC)
       => {03390668} <noun.artifact> highway#1, main road#1 -- (a major road for any form of motor transport)
           => {03941718} <noun.artifact> road#1, route#2 -- (an open way (generally public) for travel or transportation)
               => {04387207} <noun.artifact> way#6 -- (any artifact consisting of a road or path affording passage from one place to another; "he said he was looking for the way out")
                   => {00019244} <noun.Tops> artifact#1, artefact#1 -- (a man-made object taken as a whole)
                       => {00016236} <noun.Tops> object#1, physical object#1 -- (a tangible and visible entity; an entity that can cast a shadow; "it was full of rackets, balls and other objects")
                           => {00001740} <noun.Tops> entity#1 -- (that which is perceived or known or inferred to have its own distinct existence (living or nonliving))
                       => {00002645} <noun.Tops> whole#2, whole thing#1, unit#6 -- (an assemblage of parts that is regarded as a single entity; "how big is that part compared to the whole?"; "the team is a unit")
                           => {00016236} <noun.Tops> object#1, physical object#1 -- (a tangible and visible entity; an entity that can cast a shadow; "it was full of rackets, balls and other objects")
                               => {00001740} <noun.Tops> entity#1 -- (that which is perceived or known or inferred to have its own distinct existence (living or nonliving))

这里,变量只有一个值,字符串'ViaÁpia'。


更新:我找到了一种方法,可以使用一些正则表达式向导来挑出相关的行:

grep ':*\.,' file_name.txt

第一个示例的此命令的输出是

    {antifúngico: O I]antifúngico clássico utilizado no tratamento não previne a disseminação típica da infecção.,
    agente antifúngico: Os resultados sugerem a utilização terapêutica do extrato do limão como I]agente antifúngico na Odontologia.,
    fungicida: A duração do ]fungicida no carpete tem garantia de cinco anos.,
    antimicótico: Os grupos nomearam o I]antimicótico e realizaram campanha de lançamento fictícia, com material técnico de divulgação e brindes.,

2 个答案:

答案 0 :(得分:0)

如果您只想将正则表达式匹配的结果分配给bash中的变量,那么应该这样做:

myVar=$(cat file_name.txt|grep ':*\.,')

编辑:

这可能会让你更近一点:

myVar=$(cat file_name.txt|grep ':*\.,'|./x.pl)

x.pl在哪里:

#!/usr/bin/perl

while (<STDIN>) {
    my @x = split /,/;

    foreach (@x) {
        print $1 . "\n" if /\{?\W*(.*?)\:/;
    }   
}

这将提取您想要的4个单词,由换行符分隔。如果那就是你想要的,我还不完全清楚。

答案 1 :(得分:0)

如果你有GNU grep,你可能会对grep -Po '(?<={)[^:]+(?=:)'

好运