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出现的行,只是上面的所有行。我怎样才能得到那条线呢?