我想进行包含元字符的编辑。这里https://stackoverflow.com/questions/29613304/is-it-possible-to-escape-regex-metacharacters-reliously-with-sed解决方案之一是通过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
,通过变量,它由于某种原因不起作用。我无法通过网络搜索找到答案。如何让它与\n
变量一起工作?
\n
PS 变量可以是任意长度并包含任何元字符,除了用换行符替换的一个特定字符序列(例如 )之外,所有这些字符都按字面意思使用。
正确的方法,问题不在于
Perl
,而在于shell
:输出
我想我已经找到了一种通过以下方式预处理变量来分两步完成此操作的方法:
令人惊讶的是,这不适用于单个符号(换行)替换,但适用于较长的字符串:
现在我确实只有更长的字符串,但我想知道为什么它对于单个符号失败。
它在从文件读取变量赋值时起作用,如下所示: