Нужен Sed или любой скрипт для удаления пробелов между символами и замены на подчеркивания

#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
  

используя прогноз на будущее.