1

ドキュメント内のフレーズを検索したい。
しかし、おそらくフレーズは2行に分割されていました.
だから私がやりたいことは:
検索:
line1
と line2 line2 と line3
line3 と line4
......

私は初心者で、sed を使って練習したいと思っています。
では、どうすればsedでこれを行うことができますか?
何か案は?


これは動作しません。

$ sed 'N;s/line2.line3/line23/' test.txt 
line1
line2
line3
line4
line5

1) sed は 1 行目と 2 行目を読み取り、検索します。
2) sed で 3 行目と 4 行目を読み込み、検索します。
……
だから2行目と3行目のフレーズだったら見逃してしまう。
前の行を読めますか?


アップデート

@Beta の助けに感謝します。

sed '$!N;s/line2.line3/line23/;P;D;'

できます。しかし、私はまだ少し混乱しています。
まだいくつか質問があります。

マニュアルを読みました。

n: 入力の次の行をパターン空間に読み込みます。
N: 入力の次の行をパターン スペースに追加します。
d:パターンスペースを削除します。次のサイクルを開始します。
D:パターンスペースに埋め込まれた最初の改行まで削除します。次のサイクルを開始しますが、パターン空間にまだデータがある場合は入力からの読み取りをスキップします。

sed -n 'N;P' test.txt 

1) sed は 1 行目と 2 行目を読み取り、1 行目を出力します。
2) sed でパターン スペースを空にし、3 行目と 4 行目を読み取り、3 行目を出力します。
私は正しいですか?

sed -n 'N;P;D' test.txt 

1) sed は 1 行目と 2 行目を読み取り、1 行目を出力します。
2) sed はそのパターン スペースを空にせず、3 番目に読み取り、2 行目を出力します。
私は正しいですか?

上記の 2 つのコマンドのコマンド N と n で「次の行」の動作が異なるのはなぜですか?



sed '$!N;s/line2.line3/line23/;P;D;'

ps.「$!」と思います。は必要ありません。

4

1 に答える 1

5

それを行う方法は複数あります。これはあなたが試したものに近いです:

sed '$!N;s/line2.line3/line23/;P;D;'
于 2013-09-17T03:11:52.297 に答える