Ответ 1
Это довольно легко сделать с sed, и вам даже не нужно использовать пространство удержания (вспомогательный буфер sed). Учитывая input
файл ниже:
$ cat input
@"Afghanistan.png",
@"Albania.png",
@"Algeria.png",
@"American_Samoa.png",
вы должны использовать эту команду:
sed 's/@"\([^.]*\)\.png",/&\
@"\1",/' input
Результат:
$ sed 's/@"\([^.]*\)\.png",/&\
@"\1",/' input
@"Afghanistan.png",
@"Afghanistan",
@"Albania.png",
@"Albania",
@"Algeria.png",
@"Algeria",
@"American_Samoa.png",
@"American_Samoa",
Эти команды являются просто командой замены (s///
). Он соответствует любому, начиная с @"
, за которым следуют непериодические символы ([^.]*
), а затем .png",
. Кроме того, он соответствует всем непериодическим символам до .png",
, используя скобки группы \(
и \)
, поэтому мы можем получить то, что соответствовало этой группе. Итак, это регулярное выражение для замены:
@"\([^.]*\)\.png",
Итак, следует за заменой части команды. Команда &
просто вставляет все, что было сопоставлено @"\([^.]*\)\.png",
в измененном контенте. Если бы это был единственный элемент запасной части, на выходе ничего не изменилось бы. Однако после &
появляется символ новой строки, представленный обратным слэшем \
, за которым следует фактическая строка новой строки, а в новой строке мы добавляем строку @"
, за которой следует содержимое первой группы (\1
), а затем строку ",
.
Это просто краткое описание команды. Надеюсь это поможет. Также обратите внимание, что вы можете использовать строку \n
для представления строк в некоторых версиях sed (например, GNU sed). Это сделает более сжатую и понятную команду:
sed 's/@"\([^.]*\)\.png",/&\[email protected]"\1",/' input