Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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_Sed - Fatal编程技术网

Bash 打印从正则表达式到文件末尾的所有行

Bash 打印从正则表达式到文件末尾的所有行,bash,sed,Bash,Sed,长期潜伏者,第一次海报:) 我必须写一个代码,其中有一部分我需要从一个文件的所有行开始,从一个正则表达式到文件的结尾 我的代码: if [ -z "$start" ] then if [ -z "$stop" ] then echo "all functions" else echo "from beginning till stop function" sed -n "/$stop/I,\$!p" timings.txt > newtimings.t

长期潜伏者,第一次海报:) 我必须写一个代码,其中有一部分我需要从一个文件的所有行开始,从一个正则表达式到文件的结尾

我的代码:

if [ -z "$start" ]
then
  if [ -z "$stop" ]
  then
    echo "all functions"
  else
     echo "from beginning till stop function"
    sed -n "/$stop/I,\$!p" timings.txt > newtimings.txt
  fi
else
  if [ -z "$stop" ]
  then
    echo "start function to end "
    sed -n "/$start/I,\$p" timings.txt > newtimings.txt

  else
    echo "start func to stop func"
    sed -n "/$start/I,/$stop/Ip" timings.txt > newtimings.txt
  fi
fi
在我的代码行中,我假设start有一个值,stop有一个NULL,即第二条sed语句,它应该从start regex一直打印到文件末尾,但它似乎不起作用。
在这里已经读了很多文章,但仍然无法使其工作

问题是,由于sed表达式包含在双引号中,shell会展开其中的所有变量。因此,第二个
sed
命令中的
$p
被扩展为空字符串,因此
sed
会看到无效的
/startPattern/,

试着像这样逃离美元:

sed -n "/$start/,\$p" timings.txt > newtimings.txt
或者,在
$p
周围使用单引号,以便shell不会展开它:

sed -n "/$start/,"'$p' timings.txt > newtimings.txt

另一个问题:在第一个sed语句中,我想显示从文件开始到STOP regex的所有行,但我没有得到STOP regex出现的行,只是上面的所有行。我怎样才能得到那条线呢?