1. ホーム
  2. linux

[解決済み] マッチした行の後ろから始まるファイルのすべての行を削除するにはどうすればよいですか?

2022-12-13 08:48:17

質問

数行のテキストからなるファイルを持っています。

The first line
The second line
The third line
The fourth line

一行となる文字列を持っています。 The second line

この文字列と、それ以降のすべての行を削除したいので、ファイル内の The third lineThe fourth line という文字列が追加されます。ファイルはこうなる。

The first line

googleで解決策を検索してみたところ、どうやら sed . みたいな感じ。

sed 'linenum,$d' file

しかし、文字列の行番号を見つけるにはどうしたらよいのでしょうか?あるいは、他にどうすればいいのでしょうか?

どのように解決するのですか?

マッチした行(またはそれに続く行)を表示しない場合。

sed -n '/The second line/q;p' inputfile

これは、"パターンにマッチする行に到達したら終了し、そうでなければ各行を表示する"と言っています。また -n オプションは暗黙の印刷を防ぎ p コマンドを使用する必要があります。

または

sed '/The second line/,$d' inputfile

これは、"マッチした行から始まり、ファイルの終わりまで出力から全ての行を削除する"という意味です。

となりますが、最初のものの方が高速です。しかし、これは処理を完全に終了させるので、引数に複数のファイルを指定した場合、最初にマッチしたファイル以降のファイルは処理されません。この場合、deleteの方がよいでしょう。

マッチした行を表示し、それ以降の行を表示しないようにしたい場合。

sed '/The second line/q' inputfile

これは、"すべての行を表示し、一致した行に到達したら終了する"という意味です(この行にある -n オプション(暗黙のprintなし)は使用されません)。

参照 man sed を参照してください。