Используйте sed, чтобы преобразовать разделенный запятыми список в разделенный запятыми список с кавычками вокруг каждого элемента - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть

a/b/Test b/c/Test c/d/Test

и я хочу преобразовать его в:

"a/b/Test", "b/c/Test", "c/d/Test"

Я знаю, что могу использовать это (здесь: path=a/b/Test b/c/Test c/d/Test)

test=$(echo $path | sed 's/ /", "/g')

чтобы преобразовать его в

a/b/Test", "b/c/Test", "c/d/Test

Но здесь я упускаю первый и последний ".

Я не совсем знаю, как использовать sed для этого. Можно ли как-то изменить его и использовать якоря ^ и $, чтобы получить первую и последнюю часть строки и добавить туда "?

Ответы [ 4 ]

2 голосов
/ 07 ноября 2019
sed  's/.*/"&"/g ; s/ /", "/g' filename
0 голосов
/ 07 ноября 2019

awk проще:

awk -v OFS=", " -v q='"' '{for(i=1;i<=NF;i++)$i=q $i q}7'
0 голосов
/ 07 ноября 2019

Вы можете просто добавить двойные кавычки , если у вас есть текст в одну строку :

test="a/b/Test b/c/Test c/d/Test"
test='"'$(echo "$test" | sed 's/[[:space:]]\{1,\}/",&"/g')'"'
echo "$test"

См. онлайн-демонстрацию

Если выиспользовать несколько строк

test=$(echo "$test" | sed 's/[[:space:]]\{1,\}/",&"/g; s/^/"/g; s/$/"/g')
test=$(echo "$test" | sed -E 's/[[:space:]]+/",&"/g; s/^|$/"/g')

См. это интерактивное демо

Шаблон [[:space:]]\{1,\} POSIX BRE (равен [[:space:]]+ POSIX ERE) соответствует одному или нескольким пробеламchars и & в шаблоне замены вставляют это совпадающее значение обратно в результирующую строку.

0 голосов
/ 07 ноября 2019

Вы можете использовать awk:

s='a/b/Test b/c/Test c/d/Test'
awk -v OFS=', ' '{for (i=1; i<=NF; i++) $i = "\"" $i "\""} 1' <<< "$s"

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