2016-06-16 2 views
1

Этот вид относится к моему previous question. Теперь я имею дело с длинной строкой:Как бороться с длинными строками и все еще получить хорошо отформатированный код в bash?

sed -b -i.old $inifile \ 
    -e "s/a_very_long_pattern_i_should_problably_improve/terribly_long_replace_string" 

Есть ли способ, чтобы получить его хорошо отформатирован (т.е. с отступом и размером не более 80 символов)? Использование обратной косой черты добавляет экстра-пространства:

$ echo 'first_part'\ 
>  'second_part' 
first_part second_part 
+1

Привычка ответ, показанный на другой вопрос работы здесь, а? – andlrc

+0

попробуйте редактор с этой функцией. – Kent

+0

@andlrc, если вы говорите о «отвратительном и умном взломе», я не буду использовать его :) – Amessihel

ответ

2

Вы можете использовать Printf склеить кучу аргументов:

sed -b -i.old $inifile \ 
    -e "$(printf %s 
     's/long long pattern' 
     '/long long replacement/;' 
     's/another/command/' 
     )" 
+0

Утверждено, кажется, что это наименее грязное решение. Благодарю. – Amessihel

2
$ echo 'first_part'\ 
>  'second_part' 
first_part second_part 

Bash конкатенации строковых литералов, которые являются смежными.

Так, например, если у вас echo "first_part" "second_part" вы получите

first_part second_part

Но, если у вас echo "first_part""second_part" вы получите first_partsecond_part

так, чтобы воспользоваться тем, что для вашего

-e "s/a_very_long_pattern_i_should_problably_improve/terribly_long_replace_string" 

Вы можете попробовать сделать что-то вроде

sed -b -i.old $inifile \ 
    -e "s/a_very_long_pattern_" 
        "i_should_problably_improve/" 
        "terribly_long_replace_string" 
+0

Подождите, вы имеете в виду, что параметр '-e' объединяет все следующие аргументы? – Amessihel

+0

Нет, '-e' является частью его команды' sed'. Я отредактирую –

+0

Это команда _my_ sed. :) Я понимаю, что вы имеете в виду, я предпочитаю избегать этого взлома, как сказано выше. – Amessihel