Linuxでパターン(------------)の前のテキストを削除する方法

Linuxでパターン(------------)の前のテキストを削除する方法

--------------特定のパターン(14個のダッシュ)の後にデータをインポートするファイルがあります。 14個のダッシュの後にテキストを取得できるファイルを作成したいと思います。

ファイル名はportals.csv、ファイルのテキストは次のとおりです。

xyz 
anch 
skjbsejkbkjsbj 
183y83yy3e 
29292.2982 282823 
CSV File begin 
-------------- 
ip,time,release

答え1

1行ではなく、破線の後ろのすべての内容が欲しいとします。

$ sed -E '0,/^-{14}/d' portals.csv 
ip,time,release
some,more,data

0,/-{14}/ファイルの先頭( )から014個のダッシュで始まる最初の行まで一致します。d一致する行を削除します。拡張正規表現を使用するように-E指示します。代わりはです。 (これはまた、14以上のダッシュまたはそれに続くゴミがある行と一致します。)sed/^-\{14\}/

0範囲の始まりとしてGNU拡張を使用してください。標準 sed の場合、次のようになります。

< portals.csv sed -nE  -e '/^-{14}/,$p' | sed 1d

sed -E '1,/^-{14}/d'破線がファイルの最初の行である場合は失敗します。)

答え2

perl -0pe 's/^.*-{14}//g' portals.csv  > portals_clean.csv 

あるいは、ライン全体を使用している場合は、grepを使用できます。

grep -A 1 -P "-{14}" portals.csv  | tail -n 1 > portals_clean.csv 

答え3

sedを使用してください:

  sed -E -n  '/^-{14}/{n;p;}' file > newfile

AWKを使用:

  awk '/^--------------/{p=1;next}p' file > newfile

関連情報