Использование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
, что и входной, и выходной разделители полей должны быть :
и что мы хотим заключать в кавычки все поля независимо от того, нужны они на самом деле или нет.