Подтвердить что ты не робот

Как добавить двойные кавычки в строку с SED или AWK?

У меня есть список слов

name,id,3

Мне нужно, чтобы он был дважды указан как

"name,id,3"

Я попробовал sed/.*/\ "&\" /g ', получил

"name,id,3

Только одна двойная кавычка

Я также пробовал awk {print "\" "$ 1 "\" "} с точно таким же результатом Нужна помощь

4b9b3361

Ответ 1

У вашего входного файла есть возврат каретки в конце строк. Вы должны использовать dos2unix в файле, чтобы удалить их. Или вы можете сделать это:

sed 's/\(.*\)\r/"\1"/g'

который удалит возврат каретки и добавит кавычки.

Ответ 2

Используйте это для ввода вашего ввода в:

sed 's/^/"/;s/$/"/'

^ является якорем для начала строки и $ якорем для конца строки. С помощью строки sed мы заменяем начало строки и конец строки на " и " соответственно.

Пример:

$ echo -e "name,id,2\nname,id,3\nname,id,4"|sed 's/^/"/;s/$/"/'
"name,id,2"
"name,id,3"
"name,id,4"

без sed:

$ echo -e "name,id,2\nname,id,3\nname,id,4"
name,id,2
name,id,3
name,id,4

У вашего файла есть окончания строки DOS. Сначала проведите его через dos2unix.

Доказательство:

$ cat test.txt
name,id,2
name,id,3
name,id,4
$ sed 's/^/"/;s/$/"/' test.txt
"name,id,2
"name,id,3
"name,id,4
$ cat test.txt|dos2unix|sed 's/^/"/;s/$/"/'
"name,id,2"
"name,id,3"
"name,id,4"

Ответ 3

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

line='name,id,3'
echo $line | awk '{printf("\"%s\"\n", $0);}'

ИЛИ еще лучше использовать BASH printf следующим образом:

printf '"%s"\n' $line

Ответ 4

Самый простой способ, который я нашел, - использовать коды HEX для двойных кавычек:

 echo name,id,3 | awk '{print "\x22" $1 "\x22"}'
 "name,id,3"