文字列行パターンと一致するまでファイルの行を削除する方法は?
cat test.txt
The first line
The second line
The third line
The fourth line
pen test/ut
The sixth line
The seventh line
シェル/Pythonスクリプトを使用して、ファイル文字列パターン「ペンテスト」と一致するまで、上記のファイルのすべての行を削除したいと思います。
期待される出力:上記の行を削除した後、「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 -ni.bck -e '$i++,next if /^pen test/;print if $i' file
これにより、入力ファイルが読み取られ、その場所で更新されます。元のファイルはサフィックス拡張子で保存されます.bck
。
ファイルの各行を読み取るときに1$i
行が次に始まり、次の行を読み取るとpen test
フラグが設定されます。ゼロでない場合$i
(真の条件)、対応する行が印刷されます。
更新せずに関心のある行のみを抽出するには、次の手順を実行します。
perl -ne '$i++,next if /^pen test/;print if $i' file