perl:文字列を新しい行(改行文字)を含む変数に置き換えます。

perl:文字列を新しい行(改行文字)を含む変数に置き換えます。

メタ文字を含む編集をしたいと思います。ここhttps://stackoverflow.com/questions/29613304/is-it-possible-to-escape-regex-metacharacters-reliously-with-sed解決策の1つはvia perlwith s\Q ... \E(許可された答えのほぼ終わり)です。複数のスレッドを処理することが知られていますが、

echo 'a-b' > a.txt;from='-';to='\n';perl -s -0777 -pe 's/\Q$from\E/$to/' -- -from="$from" -to="$to" a.txt
a\nb
echo 'a-b' > a.txt;from='-';to='\n';perl -s -0777 -pe 's/\Q$from\E/\n/' -- -from="$from" -to="$to" a.txt
a
b

変数を介してそれ自体に書き込む場合にのみ改行に置き換えることができますが、s何らかの理由で機能しません。 Webで検索しても答えが出ませんね。変数を使用して機能させるにはどうすればよいですか\n

\nPS変数は長さに制限がなく、メタ文字を含めることができます。すべてのメタ文字は、改行文字に置き換えられる特定の文字シーケンス(例:1つ)を除いて、文字通り使用されます。

ベストアンサー1

問題は正しいアプローチではなく、Perl次のことですshell

echo 'a-b' > a.txt
from='-'
to=$'\n' # <<< look at this
perl -s -0777 -pe 's/\Q$from\E/$to/' -- -from="$from" -to="$to" a.txt

出力

a
b

おすすめ記事