Я бы сопоставил первое слово [^ ]*
, а затем добавил к нему префикс и суффикс &
:
$ sed 's/[^ ]*/path: *&*/' input.txt
path: */Application/Lockscreen/* @smiths
path: */Application/BlueLock/* @egoists
Или, если это имеет больше смысла в вашем контексте, замените пробел на '* '
и начало ^
на 'path: '
(порядок имеет значение):
$ sed 's/ /* /; s/^/path: */' input.txt
path: */Application/Lockscreen/* @smiths
path: */Application/BlueLock/* @egoists
Является ли \0
недокументированным псевдонимом &
?
@BenjaminW. Это обратная ссылка на то, что было сопоставлено, я не осознавал, что это недокументированное поведение, поэтому я исправлю использование & вместо этого. ТИЛ, не знал & :-)
Я бы сделал это, используя любой sed, чтобы он работал, даже если строка в середине содержит пробелы или @
:
$ sed 's/\(.*\)\( @[^@]*\)/path: *\1*\2/' file
path: */Application/Lockscreen/* @smiths
path: */Application/BlueLock/* @egoists
$ echo '/Application/Foo @Bar/ @whatever' | sed 's/\(.*\)\( @[^@]*\)/path: *\1*\2/'
path: */Application/Foo @Bar/* @whatever
Он просто опирается на строку в конце, не содержащую несколько @
.
Как насчет
awk
? Предполагая, что столбцы разделены пробелами:awk '{print "path: *" $1 "*", $2}'