私はかなり初心者の問題に直面していますが、それが私の関心を集めました:
</ac:image>
</a>
後ろ</ac:image>
にある</a>
行がある行を削除します</a>
。
以前にも「a href」がありましたが、それは非常に具体的で、sedとmatchを使用して削除しました。この時点で複数行の一致がある場合は、どのように処理するのか疑問に思います。一致する2行目を選択する方法がわかりません。
誰かが私に正しい方向を教えてもらえますか?
答え1
常に同じ順序であれば驚くことはなく、XMLの解析は不要で動作しますsed
。
常に2行のペアを確認するには、次のN;P;D
パターンを使用しますsed
。
sed 'N;P;\_</ac:image>\n *</a>$_d;D' filename
どのように動作しますか?
N
次の行を追加します。通常、$!N
次の行があることを確認しますが、お客様の場合は問題になりません。次の行がなければ、特別なことは起こりません。- 今、バッファに2行があります。
P
最初の行を印刷してください。 \_</ac:image>\n *</a>$_d
d
与えられた2行のパターン(\n
行間の改行文字)が見つかると、パターンスペースが削除されます。最初の行が印刷されるため、パターン空間を削除すると、ペアの2行目だけが削除されます。- 最後のステートメントは、パターンが一致しない場合にのみ実行されます。最初の行(および改行)を削除し
D
、ペアの2行目にループを再開するので、すべての行のペアがチェックされます。
答え2
gsed '/<\/ac:image>/,+1 { /<\/a>$/d; }' testfile.txt
gsed
GNUの略ですsed
。