1

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

我的代码:

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 正则表达式打印到文件末尾似乎不起作用。在这里浏览了很多帖子仍然无法正常工作

4

1 回答 1

2

问题是,由于您的 sed 表达式用双引号括起来,shell 会扩展其中的所有变量。结果,$p在您的第二个sed命令中扩展为一个空字符串,因此sed查看/startPattern/,哪个无效。

尝试像这样逃避美元:

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

或者,使用单引号,$p以便 shell 不会扩展它:

sed -n "/$start/,"'$p' timings.txt > newtimings.txt
于 2013-09-03T11:37:50.210 回答