2016-04-29 5 views
0

У меня есть этот текстКак заменить определенный символ в команде sed, которая имеет предопределенное значение?

" File: 'space folder' " 

Я хочу, чтобы заменить это только этот

" space folder " 

с использованием СЭД или AWK? Но когда я пытаюсь сделать это с помощью sed, он не принимает команду! У кого-нибудь есть решение для этого.

+2

Можете ли вы добавить еще несколько примеров для разъяснения своих а также показать вашу попытку. – anubhava

ответ

0

Если я правильно понял, вам нужен весь текст между одинарными кавычками; Вы можете использовать это:

$ sed -r "s/^.*'([^']*)'.*$/\"\1\"/g" <<< "\" File: 'space folder' \"" 
"space folder" 
$ 

Edit1: объяснение

command <<< string =><<< указывает здесь строку, вы передаете строку в команде.

Наша конечная строка заключается в следующем:

$ echo -e "\" File: 'space folder' \"" 
" File: 'space folder' " 
$ 

, так как наша строка содержит одинарные кавычки мы используем двойные кавычки для sed команды:

-r переключатель позволяет расширенное регулярное выражение

"s/^.*'([^']*)'.*$/\"\1\"/g"

приведенная выше команда заменяет всю строку текстом, находящимся между одинарные кавычки.

Регулярная Разбивка выражения:

  • ^ матчи начало строки

  • .* соответствует 0 или более символам

  • ' соответствует одинарной кавычке

  • ([^']*) согласующей s 0 или более символов, которые не являются одинарные кавычки и запоминает его в качестве захваченной группы с номером обратной ссылки \1

  • ' матчи одинарную кавычку

  • .* матчи 0 или более символов

  • $ матчи конец строки

+0

Не могли бы вы это немного объяснить? –

+0

@ J.K.Mahapatra добавлено описание – ritesht93

+0

большое спасибо. Это действительно помогает !!! –