我们有一种ASCII艺术,如下所示

ART  _____
ART |  __ \
ART | |__) |__  ___ _ __
ART |  ___/ _ \/ _ \ '__|
ART | |  |  __/  __/ |
ART |_|   \___|\___|_|
ART
ART

我们有一个变量${art}=“123456”,并希望用${art}替换art,因此系统将按如下方式打印标准输出
123456  _____
123456 |  __ \
123456 | |__) |__  ___ _ __
123456 |  ___/ _ \/ _ \ '__|
123456 | |  |  __/  __/ |
123456 |_|   \___|\___|_|
123456
123456

我已经按照这篇文章的建议试过了
sed -i "s/ART/${art}/g" ascii-art

显示以下错误消息:
sed: -e expression #1, char 6: unterminated `s' command

我在Linux ip-10-22-37-149 4.4.8-20.46.amzn1.x86_64 #1 SMP Wed Apr 27 19:28:52 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux (Amazon EC2)
sed—版本返回:
GNU sed version 4.2.1
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.

GNU sed home page: <http://www.gnu.org/software/sed/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
E-mail bug reports to: <[email protected]>.
Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.

有什么想法吗?
谢谢!

最佳答案

如果$art包含/,则可能需要反斜杠或使用其他分隔符。
或者,使用Perl:

perl -i -pe 's/ART/$ENV{art}/g' -- file

当导出$art时,这将起作用,如果不是,只需为命令导出它:
art=$art perl ...

关于linux - sed用变量中的文本替换文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45112358/

10-15 03:27