Команда Sed в верхний регистр текста между двумя конкретными строками - PullRequest
0 голосов
/ 14 июня 2019

Я хочу проанализировать файл и заменить текст между "::" и ":::" на уже существующий текст, только что заглавные.

Я пытался использовать эту команду:

sed 's/\(::\)\(.*\)\(:::\)/\1\U\2\E\3/' filename

но вывод просто помещает U в начало и E в конец строки, которую я хочу прописать

Ответы [ 5 ]

2 голосов
/ 14 июня 2019

Работает для меня, что заставляет меня думать, что вы не можете быть на Linux?

echo "This is :: some sample text ::: to test uppercasing" | sed 's/\(::\)\(.*\)\(:::\)/\1\U\2\E\3/' 
This is :: SOME SAMPLE TEXT ::: to test uppercasing
1 голос
/ 14 июня 2019

Если Perl - ваш выбор, вы можете сказать что-то вроде:

echo "This is :: some sample text ::: to test uppercasing" | perl -pe 's/(::)(.*)(:::)/\1\U\2\E\3/'
This is :: SOME SAMPLE TEXT ::: to test uppercasing
0 голосов
/ 17 июня 2019

Это может сработать для вас (GNU sed):

sed 's/::[^:]*:::/\U&/' file

или, возможно:

sed 's/::[^:]*:::/\n&\n/;h;y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/;G;s/.*\n\(.*\)\n.*\n\(.*\)\n.*\n/\2\1/' file

Использование seds y Собственная команда перевода, сопоставление с образцом и копия, хранящаяся в области удержания.

0 голосов
/ 15 июня 2019

Вы довольно близки.

В Mac OS X вам потребуется установить GNU sed, потому что используемая вами функция - \U - это расширение GNU.

Так, начните с установки:

▶ brew install gnu-sed

Затем я обычно вставляю где-то такой код:

shopt -s expand_aliases
alias sed='/usr/local/bin/gsed'

И тогда ваш GNU sed будет работать.

НаконецЯ бы упростил этот код следующим образом:

▶ sed -E 's/(::)(.*)(::)/\1\U\2\E\3/' <<< "foo::bar::baz" 
foo::BAR::baz

Отметив, что -E дает вам расширенные регулярные выражения и более чистый синтаксис при выполнении захвата.

0 голосов
/ 14 июня 2019
gawk '{match($0,/::.*:::/,a) ;gsub(/::.*::/,toupper(a[0]))}1' input

Здесь, чуть менее загадочное решение с gawk :, match используется для поиска желаемой строки, позже эта строка используется gsub для преобразования ее в повышенную причину с использованием функции toupper.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...