【问题标题】:using sed to print between two patterns [duplicate]使用 sed 在两个模式之间打印
【发布时间】:2018-06-05 18:57:12
【问题描述】:

所以我在deleting the text between two patternsprinting the text between two delimiters 上找到了很多东西,但我没有找到任何关于使用 bash 函数在两个模式之间打印文本的内容。

如果我有:

"Alas poor Yorik, I knew him well"

我想打印模式“差”和“好”(不包括)之间的所有内容:

" Yorik, I knew him "

如何使用 sed 或 awk 之类的方法来实现这一点?

【问题讨论】:

    标签: linux bash sed awk


    【解决方案1】:
    dtpwmbp:~ pwadas$ echo "Alas poor Yorik, I knew him well" | sed -e 's/^.*poor //g;s/ well.*$//g'
    Yorik, I knew him
    dtpwmbp:~ pwadas$ echo "Alas poor Yorik, I knew him well" | awk '{sub(/.*poor /,"");sub(/ well.*/,"");print;}'
    Yorik, I knew him
    

    与文件输入一起使用:

    dtpwmbp:~ pwadas$ echo "Alas poor Yorik, I knew him well" > infile
    dtpwmbp:~ pwadas$ cat infile 
    Alas poor Yorik, I knew him well
    dtpwmbp:~ pwadas$ cat infile | sed -e 's/^.*poor //g;s/ well.*$//g'
    Yorik, I knew him
    dtpwmbp:~ pwadas$ sed -e 's/^.*poor //g;s/ well.*$//g' < infile
    Yorik, I knew him
    dtpwmbp:~ pwadas$ cat infile | awk '{sub(/.*poor /,"");sub(/ well.*/,"");print;}'
    Yorik, I knew him
    dtpwmbp:~ pwadas$ awk '{sub(/.*poor /,"");sub(/ well.*/,"");print;}' < infile 
    Yorik, I knew him
    

    【讨论】: