2015-07-07 4 views
1

Я пытаюсь обрабатывать файл, содержащий валюты с помощью sed, но не могу понять, где моя ошибка.Проблема с sed regex

Это выдержка из файла:

AED: Объединенные Арабские Эмираты DirhamAFN: афгани ALL: Албанский LekAMD: Армянская DramANG: Нидерланды Антильских GuldenAOA: Ангольская Кванза ARS: Аргентинский песо AUD: Австралийский DollarAWG: Арубы FlorinAZN: Азербайджанский ManatBAM: Босния & Герцеговина Convertible MarkBBD: Барбадос DollarBDT: бангладешский TakaBGN: болгарский LevBIF: бурундийские FrancBMD: бермудский DollarBND: Бруней DollarBOB: Боливиано~d BRL: Бразильский реал * BSD: Багамский DollarBWP: Ботсвана PulaBZD: Белиз ДолларCAD: Канадский доллар [...]

Я хочу добавить новую строку перед каждой группой верхнего регистра дерева, за которой следует символ «:».
То, что я пробовал, было sed -e 's/\([A-Z]{3}:)/\n\1/g list1.txt > list2.txt, но ничего не изменилось. На самом деле, когда я просто пробовал /[A-Z]{3}/blabla/, ничего не происходит.

Я озадачен.

+0

вам нужно бежать '{}', также вам не хватает закрытие скобки и закрытие цитаты в первом примере. Он должен выглядеть как 'sed 's/\ ([A-Z] \ {3 \}: \)/\ n \ 1/g''. Также -e бессмысленно. – 123

+1

Отсутствующая скобка была опечаткой, которую я исправил, если кто-то прочитает это позже. Я не знал о фигурных скобках и о-е. Благодарю. –

ответ

1
sed -r 's/([A-Z]{3}:)/\n\1/g' list1.txt 
# or 
# sed -e 's/\([A-Z]\{3\}:\)/\n\1/g' list1.txt 

возвращение:

AED: United Arab Emirates Dirham 
AFN: Afghan Afghani 
ALL: Albanian Lek 
AMD: Armenian Dram 
ANG: Netherlands Antillean Gulden 
AOA: Angolan Kwanza 
ARS: Argentine Peso 
AUD: Australian Dollar 
AWG: Aruban Florin 
AZN: Azerbaijani Manat 
BAM: Bosnia & Herzegovina Convertible Mark 
BBD: Barbadian Dollar 
BDT: Bangladeshi Taka 
BGN: Bulgarian Lev 
BIF: Burundian Franc 
BMD: Bermudian Dollar 
BND: Brunei Dollar 
BOB: Bolivian Boliviano 
BRL: Brazilian Real* 
BSD: Bahamian Dollar 
BWP: Botswana Pula 
BZD: Belize Dollar 
CAD: Canadian Dollar 
+0

В чем была моя ошибка? Не использовать параметр -r? Выход из круглых скобок? –

+0

@ Raphaël Gomès: Я опубликовал обе версии. Тот, который использует '-r' (' --regexp-extended'), привязан к GNU sed. Второй - более портативный. –

+0

Итак, частично ускользая! Большое спасибо, это была простая проблема. –