如何在Shell脚本中在特定单词之间(作为输入参数)打印文本

时间:2018-08-19 19:04:46

标签: shell sed

我想在特定单词之间打印全文。这是我的要求。

“ 123.log”包含以下文本。

EBSPRODSTART
web logic server
Oracle database administration
Linux operating system
EBSPRODEND

输出应为:-

web logic server
Oracle database administration
Linux operating system

简介:-

“ EBSPROD”是数据库名称。此值将是一个输入参数。 例如

$ DBNAME=EBSPROD
$ echo $DBNAME
EBSPROD
$

正在尝试如下所示,但它没有显示任何值。

$ cat 123.log |sed -n '/^$DBNAMESTART$/,/^$DBANEMEND$/p'

如果直接传递DBNAME值,则会得到如下输出。

$ cat 123.log |sed -n '/^EBSPRODSTART$/,/^EBSPRODEND$/p'
web logic server
Oracle database administration
Linux operating system
$

注意:-每次执行脚本时,DBNAME的值都不相同。

1 个答案:

答案 0 :(得分:1)

您的代码存在三个问题:

  1. '...'不会插值任何变量。为此,您需要"..."
  2. $DBNAMESTART查找一个名为DBNAMESTART的变量。您需要${DBNAME}START
  3. DBANEMENDDBNAMEEND不同。

因此:

sed -n "/^${DBNAME}START\$/,/^${DBNAME}END\$/p"