Ответ 1
У вашего входного файла есть возврат каретки в конце строк. Вы должны использовать dos2unix
в файле, чтобы удалить их. Или вы можете сделать это:
sed 's/\(.*\)\r/"\1"/g'
который удалит возврат каретки и добавит кавычки.
У меня есть список слов
name,id,3
Мне нужно, чтобы он был дважды указан как
"name,id,3"
Я попробовал sed/.*/\ "&\" /g ', получил
"name,id,3
Только одна двойная кавычка
Я также пробовал awk {print "\" "$ 1 "\" "} с точно таким же результатом Нужна помощь
У вашего входного файла есть возврат каретки в конце строк. Вы должны использовать dos2unix
в файле, чтобы удалить их. Или вы можете сделать это:
sed 's/\(.*\)\r/"\1"/g'
который удалит возврат каретки и добавит кавычки.
Используйте это для ввода вашего ввода в:
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"
Вы можете использовать awk вместо sed, как это:
line='name,id,3'
echo $line | awk '{printf("\"%s\"\n", $0);}'
ИЛИ еще лучше использовать BASH printf следующим образом:
printf '"%s"\n' $line
Самый простой способ, который я нашел, - использовать коды HEX для двойных кавычек:
echo name,id,3 | awk '{print "\x22" $1 "\x22"}'
"name,id,3"