linux - sed 用变量中的文本替换文本

标签 linux bash sed scripting

我们有如下所示的 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 --version 返回:

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: <bug-gnu-utils@gnu.org>.
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/

相关文章:

c++ - exit() 函数无法退出进程

linux - 每 2 秒检查一次目录内容,如果 bash 中存在某个文件,则复制其内容

linux - 如何在 Linux 中向应用程序发出信号而不杀死它?

函数内部 sed 命令中的 bash 语法错误,在命令行上工作正常

linux - 如何 grep 监听端口 80 也可以过滤其他端口包含 80,例如 8080 8088 ...?

Linux 命令行 - 列出所有包含 .js 文件的目录,并将目录及其内容复制到一个新文件夹中

linux - 如何grep搜索字符串但从结果中省略字符串

linux - 使用 bash 时忽略正则表达式

python - 获取文件行数的最快方法

linux - 在 bash 中,在 sed 和 cat 之后得到了不需要的换行符>>