web-dev-qa-db-fra.com

Comment ajouter des guillemets doubles à une ligne avec SED ou AWK?

J'ai la liste de mots suivante:

name,id,3

Je dois le faire citer deux fois comme ceci:

"name,id,3"

J'ai essayé sed 's/.*/\"&\"/g' et a obtenu:

"name,id,3

Qui n'a qu'un seul guillemet double et manque le guillemet double de fermeture.

J'ai aussi essayé awk {print "\""$1"\""} avec exactement le même résultat. J'ai besoin d'aide.

21
minerals

Votre fichier d'entrée comporte des retours chariot à la fin des lignes. Vous devez utiliser dos2unix sur le fichier pour les supprimer. Ou vous pouvez le faire:

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

ce qui supprimera le retour chariot et ajoutera les guillemets.

Utilisez-le pour diriger votre entrée vers:

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

^ est l'ancre pour le début de la ligne et $ l'ancre de fin de ligne. Avec la ligne sed, nous remplaçons le début et la fin de la ligne par " et " respectivement.

Exemple:

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

sans sed:

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

Votre fichier semble avoir des fins de ligne DOS. Dirigez-le à travers dos2unix en premier .

Preuve:

$ 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"
21
0xC0000022L

Vous pouvez utiliser awk au lieu de sed comme ceci:

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

OU encore mieux est d'utiliser BASH printf comme ceci:

printf '"%s"\n' $line
10
anubhava

La manière la plus simple que j'ai trouvée est d'utiliser les codes HEX pour les guillemets doubles:

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

Similaire à la solution @Dennis,

Utilisation

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

Pas besoin de chercher '\ r', cela appliquera un guillemet double pour toutes les chaînes. Cela ne nécessite pas d'exécuter dos2unix sur le fichier d'entrée.

2
thanga