#regex #perl #bash #sed
#регулярное выражение #perl #bash #sed
Вопрос:
У меня есть большой файл language .ini, строки которого выглядят следующим образом:
CC MY APPS=My aplications
CC MY APPLICATION SETTINGS TITLE=My Settings
Мне нужно удалить все пробелы между CC и = и заменить символами подчеркивания, подобными этому:
CC_MY_APPS=My aplications
CC_APPLICATION_SETTINGS_TITLE=My Settings
Ответ №1:
Лучше использовать awk
$ awk 'BEGIN{OFS=FS="="}{gsub(/ /,"_",$1)}1' file
CC_MY_APPS=My aplications
CC_MY_APPLICATION_SETTINGS_TITLE=My Settings
В качестве альтернативы, если у вас Ruby (1.9 )
$ ruby -F"=" -ane '$F[0].gsub!(/s /,"_");puts $F.join("=")' file
Комментарии:
1. возможно, было бы лучше использовать
$;.inspect
в методе join вместо жесткого кодирования строки-разделителя.
Ответ №2:
Способ сделать это на perl, очень похожий на решение kurumi в Ruby :
perl -i.orig -F= -ane '$F[0]=~s/s /_/g;print join"=",@F' file.ini
Исходный файл будет сохранен в file.ini.orig
Ответ №3:
В качестве альтернативы, если ваши значения не содержат ‘=’, вы могли бы попробовать:
perl -pi.bak -e 's/s (?=.*=)/_/g' file.ini
используя прогноз на будущее.