Переформатирование отрицательных чисел с помощью sed или awk

У меня есть текстовый файл, содержащий некоторые отрицательные числа, кроме того, они отформатированы как:

00000012-

С дефисом после номера.

Я обрабатываю файл с помощью awk, чтобы переформатировать его в SQL-вставку, и интерпретатор SQL задыхается от числа, потому что после номера появляется отрицательный знак.

Есть ли регулярное выражение, которое может перемещать отрицательный знак перед номером?

3 Solutions collect form web for “Переформатирование отрицательных чисел с помощью sed или awk”

С sed :

 echo 00000012- | sed -e 's/\([0-9]+\)\(-\)\?/\2\1/' 

дает -00000012 .

То есть, сопоставление двух групп, первое с цифрами, второе – знаком, но с использованием нулей или более совпадений, а затем замена двух взаимозаменяемых.

Вместо этого полагайтесь на SQL, чтобы устранить проблему:

 create table #Tempt (Value VarChar(100)) Insert Into #Tempt Values(NULL) Insert Into #Tempt Values('500.1-') Insert Into #Tempt Values('-500.1') Insert Into #Tempt Values('20.5') select *, case when Value like '%-' then '-' + replace(value,'-',') else value end From #Tempt 

Затем используйте объемную вставку, чтобы вытащить значения из #Tempt в любую вашу фактическую таблицу.


Взятые из массовой вставки отрицательные значения .

Почему люди всегда ожидают, что программисты очистят такие глупые вещи?

Вы не единственный …

С sed:

 sed -e 's/\<\([0-9.]\+\)-/-\1/g' 

или

 sed -E -e 's/\<([0-9+]+)-/-\1/g' 

С GNU awk:

 awk '{$0=gensub(/\<([0-9.]+)-/,"-\\1","g"); print }' 

ПРИМЕЧАНИЕ. Требуется GNU awk для функции gensub() . Группы sub() и gsub() поддерживают.

С perl:

 perl -p -e 's/\b([\d.]+)-/-$1/g' 
  • чтение ввода в sed
  • Извлечь линии между двумя шаблонами
  • Можно ли сопоставить несколько конкретных номеров строк (не диапазон) с sed?
  • Как вставить текст в качестве альтернативы из двух файлов с общим шаблоном
  • Преобразование / proc / cpuinfo в JSON в linux bash
  • Обработка текста с использованием sed / awk / perl
  • Извлеките две строки после строки с определенным значением
  • Как я могу использовать регулярное выражение для извлечения текста, следующего за двумя условиями, в переменную?
  • Удалить символ из столбца CSV
  • Как я могу проинструктировать BSD sed интерпретировать escape-последовательности, такие как \ n и \ t?
  • Объединение трех последовательных строк с заменой
  • Interesting Posts

    Windows 7 для Linux: установка без CD / DVD или USB-накопителя

    lvmcache / dm-cache и отбрасывает на ядре Linux 4.7.x

    Какой редактор linux может открыть файл 200G для редактирования через минуту или две?

    IFS Kernel Panic при первой загрузке

    Можно ли редактировать файл с помощью разрешения «писать», но не в его родительском каталоге?

    Почему Metasploit не может устанавливать сеансы Meterpreter?

    Где найти привязки по умолчанию для специальных ключей

    Xorg: несколько клавиатур, одна конфигурация

    Есть ли способ импортировать адрес получателя из mutt в abook?

    Каковы правила, определяющие содержимое по умолчанию файла / etc / hosts?

    Как добавить автозаполнение пути к пользовательской функции завершения в zsh?

    Буферы или вкладки в vim? Каковы преимущества / недостатки каждого подхода?

    Поиск и установка программы (Heroku Toolbelt)

    разделить большой файл на новый файл с уникальными именами файлов

    Могу ли я сделать утилиту отступов в одиночку?

    Linux и Unix - лучшая ОС в мире.