2013-09-03 4 views
0

Долгосрочный lurker, первый раз постер :) Мне нужно написать код, в котором есть часть, где мне нужны все строки из файла, начиная с регулярного выражения до конца файлраспечатать все строки от regex до конца файла

моего код:

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 

линия моего кода, где я полагаю, есть значение для начала, но NULL для остановки, то есть второе СЕПГ заявления, которое должно напечатать от с регулярного выражения до конца файл, похоже, не работает. Прошло много сообщений, но до сих пор не получилось работать

+0

Другой вопрос: В 1-ом СЭД заявлении я хочу чтобы показать все строки от начала файла до регулярного выражения STOP, но я не получаю строку, в которой происходит повторное выражение STOP, а только все строки выше. Как мне получить эту строку? –

ответ

1

Проблема в том, что, поскольку ваше выражение sed заключено в двойные кавычки, оболочка расширяет все переменные внутри него. В результате $p в вашей второй команде sed разворачивается в пустую строку, поэтому sed видит /startPattern/,, что недопустимо.

Попробуйте уйти от доллара, как это:

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

В качестве альтернативы, используйте одинарные кавычки $p, так что оболочка не расширяет его:

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

Спасибо, что первое решение сработало :) –

+0

, а также 2-й –

Смежные вопросы