How can I delete all lines before a specific string from a number of files

后端 未结 4 1855
醉话见心
醉话见心 2021-02-19 01:15

I have n files, like:

file1:

1aaa
2eee

Test        XXX
Hanna
Lars 

file2:

1fff
2ffffd
3zzz

Test        XXX
Mike
Charly         


        
4条回答
  •  悲&欢浪女
    2021-02-19 01:40

    cat <<-EOF > file1.txt
    1aaa
    2eee
    
    Test        XXX
    Hanna
    Lars
    EOF
    
    cat file1.txt | sed -e '/Test *XXX/p' -e '0,/Test *XXX/d'
    

    Output:

    Test        XXX
    Hanna
    Lars
    

    Explanation:

    • -e '/Test *XXX/p' duplicates the line matching /Test *XXX/
    • -e '0,/Test *XXX/d' deletes from line 0 to the first line matching /Test *XXX/

    By duplicating the line, then removing the first one, we effectively retain the matched line, successfully deleting all lines BEFORE Test XXX

    Note: this will not work as expected if there are multiple Test XXX lines.

提交回复
热议问题