パターンを検索し、3番目の空白行にテキストを追加します。

パターンを検索し、3番目の空白行にテキストを追加します。

パターンを検索してから、3 番目の空白行が見つかるまで、パターンの後ろの空白行を数え、その空白行にコンマとセミコロンを入れようとします。空白行の間に大量のデータがある場合や、空白行の間にテキストが1行しかない場合があります。

GROUP DIRECTORY CATEGORIES
datadata

Grouping Cat
datadata

datadata
this is the 3rd blank line

私は成功せずに次のことを試しました。どんな提案がありますか?

sed '/GROUP DIRECTORY CATEGORIES/,/^$/^$/^$/,;/' file1>file2
sed '/GROUP DIRECTORY CATEGORIES/$/$/$/,;/' file1>file2
sed '/GROUP DIRECTORY CATEGORIES/{$;$;$/./,;/1;}' file1>file2

ベストアンサー1

sedこの目的に使用できますが、計算に関連するすべての操作はを使用して簡単に実行できますawk

このテストファイルを考えてみましょう。

$ cat file1
GROUP DIRECTORY CATEGORIES
datadata

Grouping Cat
datadata

datadata

Above is 3rd blank line

,;次の3番目の空白行にaを追加するにはGROUP DIRECTORY CATEGORIES

$ awk '/GROUP DIRECTORY CATEGORIES/{f=1}  f && /^$/ {f++; if (f==4) $0=",;"} 1' file1
GROUP DIRECTORY CATEGORIES
datadata

Grouping Cat
datadata

datadata
,;
Above is 3rd blank line

仕組み:

  • /GROUP DIRECTORY CATEGORIES/{f=1}

    正規表現に一致する行が見つかるたびに、GROUP DIRECTORY CATEGORIES変数はf1に設定されます。

  • f && /^$/ {f++; if (f==4) $0=",;"}

    0ではなくf現在の行が空の場合は1を/^$/追加しますf。 4の場合、f現在の空白行を,;

  • 1

    1awkのprint-the-lineの不思議な略語です。

おすすめ記事