を使用して、最後の文字が改行である場合にのみ置換を実行する方法を探しています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
それは味の問題です。