Puncte:0

Cum să adăugați ghilimele la al doilea element al unui șir după virgulă într-un fișier text bash

drapel bt

Conținutul fișierului:

1234,/Produs/număr 234567
2456,/Produs/număr 456789

și așa mai departe...multe rânduri

Doriți rezultatul după cum urmează:

1234,"/Produs/număr 234567"
2456,"/Produs/număr 456789"
David avatar
drapel cn
Apoi încercați să faceți singur codul și să-l postați. Dacă există erori, cineva poate încerca să vă ajute. Nimeni nu o va face pentru tine.
pLumo avatar
drapel in
Ce problema vrei sa rezolvi? Vă rugăm să verificați: https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem
drapel ru
Doriți să afișați pur și simplu conținutul acelui fișier cu ghilimele adăugate sau doriți să înlocuiți acele conținuturi cu cele noi (cu ghilimele) din acel fișier?
mchid avatar
drapel bo
Chiar ați vrut `1234,"/Product/number 234567" 2456,"/Product/number 456789"` în loc de două rânduri individuale? În orice caz, răspunsul meu de mai jos va funcționa.
Puncte:3
drapel hr

Pentru datele structurate (adică care sunt descrise în termeni de înregistrări constând din delimitate câmpuri) Aș sugera un instrument precum awk:

awk -F, 'BEGIN{OFS=FS} {$2 = "\"" $2 "\""} {print}' fișier

sau (mai compact - folosind acțiunea de imprimare implicită)

awk -F, 'BEGIN{OFS=FS} {$2 = "\"" $2 "\""} 1' fișier

daca tu într-adevăr atunci trebuie să o faci nativ în bash

în timp ce IFS=, citește -r a b; face printf '%s,"%s"\n' "$a" "$b"; facut < fisier

(dar nu - vezi De ce utilizarea unei bucle shell pentru a procesa text este considerată o practică proastă?).

Puncte:2
drapel bo
Puteți face acest lucru folosind perl regex și puteți înlocui similar cu utilizarea sed.

Presupunând că vei avea întotdeauna /Numărul produsului urmat de un singur grup de cifre, puteți utiliza următoarea comandă pentru a imprima modificările:

perl -pe 's|/Product/number (\d+)|"$&"|g' nume de fișier

Dacă sunteți mulțumit de rezultat, puteți utiliza următoarea comandă pentru a edita fișierul:

perl -pi -e 's|/Product/number (\d+)|"$&"|g' nume de fișier
  • (\d+) se potrivește cu orice grup de una sau mai multe cifre
  • $& backreferences întregul șir potrivit, similar cu utilizarea & în sed

De asemenea, folosesc | ca separator în loc de / deoarece șirul conține bare oblice.


Alternativ, puteți utiliza sed folosind următoarea comandă pentru a imprima:
sed -Ee 's|/Product/number [[:digit:]]+|"&"|g' nume de fișier

sau următoarea comandă pentru a edita efectiv modificările aduse fișierului:

sed -Ei 's|/Product/number [[:digit:]]+|"&"|g' nume de fișier

Această comandă folosește opțiunea de expresii regulate extinse -E

  • [[:cifra:]]+ corespunde unui grup de una sau mai multe cifre
  • & backreferences întregul șir potrivit
Puncte:0
drapel cn

Dacă datele dvs. sunt într-adevăr la fel de simple pe cât arătați, tot ce doriți este să adăugați un caracter ghilimele duble după prima virgulă și după ultimul caracter din fiecare rând. Dacă da, doar faceți:

$ sed 's/,/,"/; s/$/"/' fişier
1234,"/Produs/număr 234567"
2456,"/Produs/număr 456789"

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.