bash заменяет специальные символы в переменной

Использованиеawk(не такое короткое, как решение sed, хотя):

$ awk -F ':' -v OFS='":"' '{ $1 = "\"" $1; $NF = $NF "\""; print }' file
"user1":"x":"1":"1":"User1":"/home/user1":"/bin/bash"
"user2":"x":"2":"2":"User2":"/home/user2":"/bin/bash"
"user3":"x":"3":"3":"User3":"/home/user3":"/bin/bash"

Это устанавливает разделитель выходного поля(OFS)на строку ":", а затем добавляет "к первому полю с разделителем:-и добавляет то же самое к последнему полю. Затем он печатает полученную запись.


awkснова, но перебирая поля, добавляя двойные кавычки к каждому перед выводом измененной записи:

awk -F ':' -v OFS=':' '{ for (i=1; i<=NF; ++i) $i=sprintf("\"%s\"", $i); print }' file

Чтение файла, как если бы это был:-CSV-файл с разделителями, с использованием csvformatиз csvkit:

$ csvformat -d ':' -D ':' -U 1 file
"user1":"x":"1":"1":"User1":"/home/user1":"/bin/bash"
"user2":"x":"2":"2":"User2":"/home/user2":"/bin/bash"
"user3":"x":"3":"3":"User3":"/home/user3":"/bin/bash"

Здесь мы сообщаем csvformat, что и входной, и выходной разделители полей должны быть :и что мы хотим заключать в кавычки все поля независимо от того, нужны они на самом деле или нет.

4
29.10.2021, 14:57
0 ответов

Теги

Похожие вопросы