--------------
特定のパターン(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}/
ファイルの先頭( )から0
14個のダッシュで始まる最初の行まで一致します。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