Bash 在CYGWIN中用shell变量的内容预先结束输出行

Bash 在CYGWIN中用shell变量的内容预先结束输出行,bash,sed,cygwin,environment-variables,prepend,Bash,Sed,Cygwin,Environment Variables,Prepend,我正在windows64和Windows7上使用cygwin bash 我有一个grep的结果,我想在它前面加一个字符串(文件名)。此grep是一系列短管道的终端 #!/bin/sh for d in `ls extracted_xmls` do if [ -d "extracted_xmls/$d" ]; then echo $d fi if [ -f "interim/$d.txt" ]; then rm "interim/$d.tx

我正在windows64和Windows7上使用cygwin bash

我有一个grep的结果,我想在它前面加一个字符串(文件名)。此grep是一系列短管道的终端

#!/bin/sh
for d in `ls extracted_xmls`
do
    if [ -d "extracted_xmls/$d" ]; then
        echo $d
    fi

    if [ -f "interim/$d.txt" ]; then
        rm "interim/$d.txt"
    fi

    for f in `ls extracted_xmls/$d`
    do
        cat "extracted_xmls/$d/$f" | \
            tr "\n" "|" | \
            grep -o "<?GOVINT.*<?GOVINT" \
        >> "interim/$d.txt"
    done
done
这管用!但是,我想这样做:

 cat out150106.csv | sed  "s/^/$PATH/"
($PATH只是一个方便的变量,它不是我想在上面的程序中使用的实际变量。)

当我尝试这样做时,cygwin bash报告: sed:-e表达式#1,字符6:s的未知选项

从谷歌搜索中我可以看出,这类东西似乎在其他版本的Unix中也能工作。(顺便提一下,使用awk也有类似的问题。)

我怎么能在cygwin bash中做到这一点

根据要求,我包括样本输入和输出文件。 示例输入:(路径/文件名为“ipg140107/2014_G_08622343.xml”)


.... 泡泡茶
... 更多的东西。。。
联邦资助的研究

这项发明是在DARPA授予HR0011-07-C-0075的政府支持下完成的。政府对这项发明有一定的权利

... 更多的东西。。。
我想要的结果是:

ipg140107/2014_G_08622343.xml:<?GOVINT description="Government Interest" end="lead"?>
            <heading id="h-0002" level="1">FEDERALLY SPONSORED RESEARCH</heading>
            <p id="p-0003" num="0002">The invention was made with Government support under HR0011-07-C-0075 awarded by DARPA. The Government has certain rights in the invention.</p>
            <?GOVINT
ipg140107/2014_G_08622343.xml:
联邦资助的研究

这项发明是在DARPA授予HR0011-07-C-0075的政府支持下完成的。政府对这项发明有一定的权利


让我们首先清理脚本,使其更加健壮/高效/类似于shell:

for d in extracted_xmls/*
do
    if [ -d "extracted_xmls/$d" ]; then
        echo "$d"
    fi

    if [ -f "interim/$d.txt" ]; then
        rm "interim/$d.txt"
    fi

    for f in "extracted_xmls/$d"/*
    do
        tr "\n" "|" < "extracted_xmls/$d/$f" |
            grep -o "<?GOVINT.*<?GOVINT" \
        >> "interim/$d.txt"
    done
done
提取的\u xmls中d的
/*
做
如果[-d“提取_xmls/$d”];然后
回音“$d”
fi
如果[-f“中期/$d.txt”];然后
rm“中期/$d.txt”
fi
对于“提取的\u xmls/$d”中的f/*
做
tr“\n”“|”<“提取的xmls/$d/$f”|

grep-o“让我们从清理脚本开始,让它变得更加健壮/高效/像shell一样:

for d in extracted_xmls/*
do
    if [ -d "extracted_xmls/$d" ]; then
        echo "$d"
    fi

    if [ -f "interim/$d.txt" ]; then
        rm "interim/$d.txt"
    fi

    for f in "extracted_xmls/$d"/*
    do
        tr "\n" "|" < "extracted_xmls/$d/$f" |
            grep -o "<?GOVINT.*<?GOVINT" \
        >> "interim/$d.txt"
    done
done
提取的\u xmls中d的
/*
做
如果[-d“extracted_xmls/$d”];则
回音“$d”
fi
如果[-f“middial/$d.txt”];则
rm“中期/$d.txt”
fi
对于“提取的\u xmls/$d”中的f/*
做
tr“\n”“|”<“提取的xmls/$d/$f”|

grep-o“让我们从清理脚本开始,让它变得更加健壮/高效/像shell一样:

for d in extracted_xmls/*
do
    if [ -d "extracted_xmls/$d" ]; then
        echo "$d"
    fi

    if [ -f "interim/$d.txt" ]; then
        rm "interim/$d.txt"
    fi

    for f in "extracted_xmls/$d"/*
    do
        tr "\n" "|" < "extracted_xmls/$d/$f" |
            grep -o "<?GOVINT.*<?GOVINT" \
        >> "interim/$d.txt"
    done
done
提取的\u xmls中d的
/*
做
如果[-d“提取_xmls/$d”];然后
回音“$d”
fi
如果[-f“中期/$d.txt”];然后
rm“中期/$d.txt”
fi
对于“提取的\u xmls/$d”中的f/*
做
tr“\n”“|”<“提取的xmls/$d/$f”|

grep-o“让我们从清理脚本开始,让它变得更加健壮/高效/像shell一样:

for d in extracted_xmls/*
do
    if [ -d "extracted_xmls/$d" ]; then
        echo "$d"
    fi

    if [ -f "interim/$d.txt" ]; then
        rm "interim/$d.txt"
    fi

    for f in "extracted_xmls/$d"/*
    do
        tr "\n" "|" < "extracted_xmls/$d/$f" |
            grep -o "<?GOVINT.*<?GOVINT" \
        >> "interim/$d.txt"
    done
done
提取的\u xmls中d的
/*
做
如果[-d“extracted_xmls/$d”];则
回音“$d”
fi
如果[-f“middial/$d.txt”];则
rm“中期/$d.txt”
fi
对于“提取的\u xmls/$d”中的f/*
做
tr“\n”“|”<“提取的xmls/$d/$f”|

从sed正则表达式的角度来看,“grep-o”似乎是您的可变内容特殊字符。可能是一个小集合-vx,在它之前的excat上下文
$PATH
总是包含
/
s,这将终止sed中的
s/..
命令,因此,对于试图告诉我们实际变量可以包含什么,这可能是一个非常糟糕的代理选择。似乎变量内容是sed中的特殊字符正则表达式的观点。可能是一个小集合-vx,在它之前的excat上下文
$PATH
总是包含
/
s,这将终止sed中的
s/..
命令,因此,对于试图告诉我们实际变量可以包含什么,这可能是一个非常糟糕的代理选择。似乎变量内容是sed中的特殊字符正则表达式的观点。可能是一个小集合-vx,在它之前的excat上下文
$PATH
总是包含
/
s,这将终止sed中的
s/..
命令,因此,对于试图告诉我们实际变量可以包含什么,这可能是一个非常糟糕的代理选择。似乎变量内容是sed中的特殊字符正则表达式的观点。可能是一个小集合-vx,在excat上下文
$PATH
之前,它总是包含
/
s,这将终止sed中的
s/..
命令,因此这可能是一个非常糟糕的代理选择,因为它试图告诉我们实际变量可以包含什么。