我在一个bash脚本中有一条文本消息,我正试图在一个模式中提取它的一部分.例如,我的文本字符串如下所示:

-----START\nabcdEFGHij\nKLMN\nO/PqR\n-----END\n'This is a sample text..

这是脚本的一部分:

#!/bin/sh

test="-----START\nabcdEFGHij\nKLMN\nO/PqR\n-----END\n'This is a sample text.."

sample_text=$test

echo $sample_text | sed "s/x='/x='\n/g" | awk "/-----START/,/-----END/"

此脚本将由非超级用户执行.它对根用户运行良好.

现在,我想删除所有第\n行字符,只提取-----START,-----END中的字符串.因此,我的输出应该是:

-----START
abcdEFGHij
KLMN
O/PqR
-----END

有谁能告诉我怎么解决这个问题吗?

提前谢谢你

推荐答案

您需要首先用换行符替换两个字符\ n.

text=$(cat <<EOF
-----START\nabcdEFGHij\nKLMN\nO/PqR\n-----END\n'This is a sample text..
EOF
)
echo "$text" | sed 's/\\n/\n/g' | awk "/-----START/,/-----END/"

注意:在您的脚本中,"\n"只是n.如果您想保留\,您必须编写"\\n"'\n',或者使用上面的此处文档.

Linux相关问答推荐

git别名函数可以用单引号写吗?

使用Bash从文件名中删除日期名称

Shell 脚本程序 - 从日志(log)文件中过滤磁盘空间利用率超过 80% 的行

如何在REPL控制台中使用PowerShell将特定的CSV列转换为TitleCase?

如何在 Linux 上打印带有屏蔽值的环境名称?

如何在不进行轮询且不吃掉其他人子进程的退出代码的情况下等待一组子进程(并且只有它们)?

有没有办法确定什么代码使 linux 共享对象inflating ?

如何更改文件的上次访问/修改/更改日期?

如何启用或切换现有的Flutter 项目(仅限移动设备)到 MacOS 或 WEB 或 Linux 或 Windows?

awk 不打印所需的 df 输出

如何使用 Bash 读取文件中的倒数第二行?

为什么我不能将 Unix Nohup 与 Bash For 循环一起使用?

如何在python中检索进程开始时间(或正常运行时间)

如何找出哪个进程正在消耗等待 CPU(即 I/O 阻塞)

如何比较两个压缩包的内容

为什么在编译 K&R2 第 1 章中最长的行示例时出现getline 的类型冲突错误?

将 $_GET 参数传递给 cron 作业(job)

如何在没有 IDE 的情况下构建和部署三星 SmartTV 应用程序(例如:在 Linux 上)

bash shell 脚本函数定义(如f () {})中使用的括号是什么?它与使用function关键字不同吗?

C++:使用 longjmp 和 setjmp 安全吗?