【发布时间】:2021-10-05 10:06:45
【问题描述】:
任何人都知道一种方法(在 RHEL7 和 AIX5 上工作)制作一个在 /bin/bash 或 /bin/ksh 上运行的脚本,以使用 grep(或其他函数)在文本文件中搜索 1 个或多个字符串),结果被放入一个变量中,但在该变量中,每次出现的末尾都有一个字符串“\\n”?
例如:
TextFile1.txt
[root@server ~]$ cat TextFile1.txt
aby ORA-3120: unable to xx
sxyy unable to aa
sxyy ORA-3120: unable to aa
ytxy unable to bb
y41y unable to dd
yanby unable to ff
ytxy ORA-3120: unable to bb
y41y ORA-3120: unable to dd
y124gby unable to gg
yanby ORA-3120: unable to ff
aby unable to xx
y124gby ORA-3120: unable to gg
简单的grep
[root@server ~]$ cat TextFile1.txt | grep "ORA-"
aby ORA-3120: unable to xx
sxyy ORA-3120: unable to aa
ytxy ORA-3120: unable to bb
y41y ORA-3120: unable to dd
yanby ORA-3120: unable to ff
y124gby ORA-3120: unable to gg
将结果放入变量中
[root@server ~]$ aa=$(cat TextFile1.txt | grep "ORA-")
[root@server ~]$ echo $aa
aby ORA-3120: unable to xx sxyy ORA-3120: unable to aa ytxy ORA-3120: unable to bb y41y ORA-3120: unable to dd yanby ORA-3120: unable to ff y124gby ORA-3120: unable to gg
想要的结果:
[root@server ~]$ echo $aa
\\n aby ORA-3120: 无法 xx \\n sxyy ORA-3120: 无法 aa \\n ytxy ORA-3120: 无法 bb \\n y41y ORA-3120: 无法 dd \\n yanby ORA-3120: 无法 ff \\n y124gby ORA-3120: 无法 gg \\n
提前感谢您的帮助和提示
【问题讨论】:
-
尝试使用双引号,
echo "$aa" -
为什么将输出存储在
aa变量中? -
在 bash 中,
"${aa//$'\n'/\\\\n}" -
@anubhava 该变量将由脚本的另一个步骤获取,以传递给另一个需要它的程序
-
@Shawn 感谢您的提示,这无疑是朝着正确方向迈出的一步。但目前它并未显示所有已识别的行。它有点把它们从中间切开。早上不累的时候会尝试调试它。 [root@server]# echo "${aa//$'\n'/\\\\n}" \\ny124gby ORA-3120: 无法 ggaby ORA-3120: 无法 xx [root@server]# echo "${aa//$'\n'/ \\\\n }" \\n y124gby ORA-3120: 无法 ggaby ORA-3120: 无法 xx