如何从多行字符串中剪切模式并存储到新变量中?

how to cut the pattern from a multiple line string and store to the new variable?

我有一个字符串变量

$var="-- this is a  --
      -- comment --
      hellow
      world"

我需要将字符串字符串分成两部分,这样就有两个新的字符串变量

$var1="-- this is a  --
      -- comment --"

$var2="hellow
       world" 

我需要 $var1 $var2

中的新行

我试过的

var2=$(echo $var | sed 's/^--.*--//g')

我无法将正在删除的模式存储在 $var1 中。

注意:连字符很重要,换行符也很重要。 已尝试 bash 字符串操作,但它不起作用

只需使用grep

对于var1

 grep  '\-\-.*\-\-'

对于var2

 grep -v '\-\-.*\-\-'

正如@123 所建议的,如果我们在 grep 命令中使用 --,则不需要转义。

所以你也可以用这个

对于var1

 grep  -- '--.*--'

对于var2

 grep -v '--.*--'

您在问题中提出的 $var 似乎包含换行,使您的 $var 实际上由 4 行不同的行组成。在这种情况下,您可以像这样拆分行:

$ var1=$(sed -n '1,2p' <<<"$var")
$ var2=$(sed -n '3,4p' <<<"$var")

$var1 获取 $var 的第 1 行和第 2 行(如果您愿意,也可以从文件中获取)
$var2 获取 $var 的第 3 行和第 4 行(如果您愿意,也可以从文件中获取)