sedの"&"の挙動で罠にハマった話。
ハマったこと
sedで &
を含む文字に置換しようとする場合は一手間必要です。
REPLACE_TARGET_STRING
を123&456
に置換する場合を考えます。
❯ cat replace.txt
REPLACE_TARGET_STRING
普通にsedを実行すると下記のような出力結果となり、意図した結果となりません。
❯ sed -e "s@REPLACE_TARGET_STRING@123&456@g" replace.txt
123REPLACE_TARGET_STRING456
というのも、sedの 置換後文字列 の中に &
が存在する場合、これは置換前の文字列(この場合、REPLACE_TARGET_STRING)に置き換えられます。(知らなかった)
❯ man sed
(略)
An ampersand (``&'') appearing in the replacement is replaced by
the string matching the RE. The special meaning of ``&'' in this
context can be suppressed by preceding it by a backslash.
バックスラッシュをつけてエスケープすることで、意図した結果を得ることができます。
❯ sed -e "s@REPLACE_TARGET_STRING@123\&456@g" replace.txt
123&456
知っている人も多い気がしますが、僕は全然知らなかったのでメモ。
Author And Source
この問題について(sedの"&"の挙動で罠にハマった話。), 我々は、より多くの情報をここで見つけました https://qiita.com/yuta-ron/items/22f4ec3ded6d0831b2c8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .