如何删除文件中的行直到它与字符串行模式匹配?
cat test.txt
The first line
The second line
The third line
The fourth line
pen test/ut
The sixth line
The seventh line
我想使用 shell/python 脚本删除上述文件中的所有行,直到它与文件字符串模式“pen test”匹配
预期输出:删除上述行后,文件“test.txt”应仅包含这些行:
The sixth line
The seventh line
答案1
使用 GNU sed:删除第一个匹配项之前的所有内容并就地修改文件:
sed -i '0,/pen test/d' test.txt
答案2
你可以这样做:
cat test.txt | grep -A2 "pen test/ut" | sed "1 d"
The sixth line
The seventh line
答案3
您可以使用实用程序sed
并按Perl
如下方式执行此操作:
perl -ne '
next unless /pen/; # skip till we meet the first interesting record
print <>; # <> in the list context, fetches the entire remaining file
' input-file.txt
sed -ne '
/pen/!d
n
:loop
$!N;P;s/.*\n//
tloop
' input-file.txt
sed -ne '
/pen/!d ;# reject lines till we see the first interesting line
n ;# skip the first time we see the interesting line
:n ;# then setup a do-while loop which"ll do a print->next->print->... till eof
p;n ;# the looping ends when the n command tries to read past the last record
bn
' input-file.txt
答案4
使用 Perl:
perl -ni.bck -e '$i++,next if /^pen test/;print if $i' file
这会读取您的输入文件并进行就地更新。原始文件以后缀扩展名保留.bck
。
当读取文件的每一行时,$i
如果一行以 开头pen test
并且读取下一行,则会设置一个标志 。当$i
不为零(真实条件)时,将打印行。
如果您只想提取感兴趣的行而不更新,只需执行以下操作:
perl -ne '$i++,next if /^pen test/;print if $i' file