sedを使用して行末を検出する方法

sedを使用して行末を検出する方法

を使用して、最後の文字が改行である場合にのみ置換を実行する方法を探していますsed

たとえば、

lettersAtEndOfLine

交換しましたが、これは以下ではありません。

lettersWithCharacterAfter&

改行文字をうまく処理できないため、sed次のようには機能しません。

$ sed -E "s/[a-zA-Z]*\n/replace/" file.txt

これはどのように達成できますか?

ベストアンサー1

標準を使用するsedいいえファイルから読み取られたテキストに改行が表示されます。これは、1行ずつ読み取るため、sedパターン空間内の現在の行のテキストの末尾に改行文字がないためです。sedつまり、sed改行で区切られたデータを読み取り、区切り文字はスクリプトが表示するsed内容の一部ではありません。

正規表現は次のとおりです。固定行末$(または行の先頭^)に使用します。行の先頭/末尾に式を固定すると、行のどこにでも正確に一致します。

[A-Za-z]*行末のパターンに一致する項目を別の項目に置き換えるには、次のようにパターンを固定します。

[A-Za-z]*$

...他の場所ではなく、行の末尾に一致するように強制します。

しかし[A-Za-z]*$それも一致するから何もない(たとえば、最後に現れる空の文字列は、すべてライン)、強制的に一致させる必要があります。たとえば、

[A-Za-z][A-Za-z]*$

または

[A-Za-z]\{1,\}$

したがって、sedコマンドラインは次のようになります。

$ sed 's/[A-Za-z]\{1,\}$/replace/' file.txt

ここでは非標準オプションは使用しません。-Eなぜなら必ずしも必要ではないからです。それであなたは書くことができます

$ sed -E 's/[A-Za-z]+$/replace/' file.txt

それは味の問題です。

おすすめ記事