Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何从多行字符串中剪切模式并存储到新变量?_Bash_Unix_Awk_Sed_Cut - Fatal编程技术网

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

Bash 如何从多行字符串中剪切模式并存储到新变量?,bash,unix,awk,sed,cut,Bash,Unix,Awk,Sed,Cut,我有一个字符串变量 $var="-- this is a -- -- comment -- hellow world" 我需要把字符串分成两部分,这样就有了两个新的字符串变量 $var1="-- this is a -- -- comment --" $var2="hellow world" 我需要新行,因为它在$var1$var2中 我试过的 var2=$(echo $var | sed 's/^--.*--//g')

我有一个字符串变量

$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

对于var2

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

所以你也可以用这个

对于var1

对于var2

您在问题中提出的$var似乎包含新行,使您的$var实际上由4行组成。在这种情况下,可以按如下方式拆分线:

$ var1=$(sed -n '1,2p' <<<"$var")
$ var2=$(sed -n '3,4p' <<<"$var")
$var1获取$var的第1行和第2行,如果愿意,可以从文件中获取
$var2获取$var的第3行和第4行,如果您愿意,也可以从文件中获取。请接受答案,这样问题就可以结束了。谢谢。你为什么要转义-?我在Linux 3.10.0-327.36.2.el7.x86_64上试用过,没有转义它就无法工作。你需要在字符串前面加-,否则它会把它当作一个标志。i、 grep-'-.*-'和grep-v-'-.*-'完美。如果在字符串之前使用-,则无需将转义。编辑答案,把这个也放进去。谢天谢地,这行不通。Op的$var包含——这是一个——注释——hellow World,在他以这种形式签署后没有换行符posted@RomanPerekhrest没有新线?但数据中出现了有疑问的新行!天哪,$var是否包含新行?您的示例看起来像4行。是的,至少上次他问了几乎相同的问题,现在似乎已被删除,$var显示它们。@JamesBrown如果$var包含新行,那么我的解决方案似乎有效……对我来说很好。现在我们等待OP批准或不批准解决方案。我就把它们放在这里:echo${var*-}和echo${var%-*}-前一个回显一个额外的换行符,有人知道如何删除吗?@JamesBrown使用printf或echo-n
 grep -v '\-\-.*\-\-'
 grep  -- '--.*--'
 grep -v '--.*--'
$ var1=$(sed -n '1,2p' <<<"$var")
$ var2=$(sed -n '3,4p' <<<"$var")