メタ文字を含む編集をしたいと思います。ここhttps://stackoverflow.com/questions/29613304/is-it-possible-to-escape-regex-metacharacters-reliously-with-sed解決策の1つはvia perl
with 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
?
\n
PS変数は長さに制限がなく、メタ文字を含めることができます。すべてのメタ文字は、改行文字に置き換えられる特定の文字シーケンス(例: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