Рейтинг:0

Как добавить кавычки ко второму элементу строки после запятой в текстовом файле bash

флаг bt

Содержимое файла:

1234,/Продукт/номер 234567
2456,/Продукт/номер 456789

и так далее...много строк

Хотите, чтобы результат выглядел следующим образом:

1234, "/Продукт/номер 234567"
2456, "/Продукт/номер 456789"
David avatar
флаг cn
Тогда попробуйте сделать код самостоятельно и опубликовать его. Если есть ошибки, кто-то может попытаться вам помочь. Никто не собирается делать это за вас.
pLumo avatar
флаг in
Какую проблему вы хотите решить? Пожалуйста, проверьте: https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem
флаг ru
Вы хотите просто отобразить содержимое этого файла с добавленными кавычками или заменить это содержимое новым (с кавычками) в этом файле?
mchid avatar
флаг bo
Вы действительно хотели `1234,"/Product/number 234567" 2456,"/Product/number 456789"` вместо двух отдельных строк? В любом случае мой ответ ниже будет работать.
Рейтинг:3
флаг hr

Для структурированных данных (т. е. которые можно описать с точки зрения записи состоящий из разделенных поля) Я бы предложил такой инструмент, как awk:

awk -F, 'BEGIN{OFS=FS} {$2 = "\"" $2 "\""} {print}' файл

или (более компактно - с использованием действия печати по умолчанию)

awk -F, 'BEGIN{OFS=FS} {$2 = "\"" $2 "\""} 1' файл

если ты В самом деле нужно сделать это изначально в bash, тогда

в то время как IFS=, читать -r a b; do printf '%s,"%s"\n' "$a" "$b"; сделано < файл

(но не см. Почему использование цикла оболочки для обработки текста считается плохой практикой?).

Рейтинг:2
флаг bo
Вы можете сделать это, используя перл регулярное выражение и вы можете заменить аналогичный использованию сед.

Предполагая, что у вас всегда будет /Номер продукта за которой следует одна группа цифр, вы можете использовать следующую команду для печати изменений:

perl -pe 's|/Product/number (\d+)|"$&"|g' имя файла

Если вы удовлетворены результатом, вы можете использовать следующую команду для редактирования файла:

perl -pi -e 's|/Product/number (\d+)|"$&"|g' имя файла
  • (\ д+) соответствует любой группе из одной или нескольких цифр
  • $& ссылается на всю совпадающую строку, аналогично использованию & в сед

Кроме того, я использую | как разделитель вместо / потому что строка содержит косую черту.


В качестве альтернативы вы можете использовать сед с помощью следующей команды для печати:
sed -Ee 's|/Product/number [[:digit:]]+|"&"|g' имя файла

или следующую команду для фактического редактирования изменений в файле:

sed -Ei 's|/Product/number [[:digit:]]+|"&"|g' имя файла

Эта команда использует параметр расширенных регулярных выражений

  • [[:цифра:]]+ соответствует группе из одной или нескольких цифр
  • & обратные ссылки на всю совпадающую строку
Рейтинг:0
флаг cn

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

$ sed 's/,/,"/; s/$/"/' файл
1234, "/Продукт/номер 234567"
2456, "/Продукт/номер 456789"

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.