Điểm:0

Cách thêm dấu ngoặc kép vào phần tử thứ hai của chuỗi sau dấu phẩy trong tệp văn bản bash

lá cờ bt

Nội dung tệp:

1234,/Sản phẩm/số 234567
2456,/Sản phẩm/số 456789

vân vân ... nhiều dòng

Muốn đầu ra như sau:

1234,"/Sản phẩm/số 234567"
2456,"/Sản phẩm/số 456789"
David avatar
lá cờ cn
Sau đó, cố gắng tự tạo mã và đăng nó. Nếu có lỗi ai đó có thể cố gắng giúp bạn. Không ai sẽ làm điều đó cho bạn.
pLumo avatar
lá cờ in
Bạn muốn giải quyết vấn đề gì? Vui lòng kiểm tra: https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem
lá cờ ru
Bạn có muốn chỉ hiển thị nội dung của tệp đó với các dấu ngoặc kép được thêm vào hay bạn muốn thay thế những nội dung đó bằng nội dung mới (có dấu ngoặc kép) trong tệp đó?
mchid avatar
lá cờ bo
Bạn có thực sự muốn `1234,"/Product/number 234567" 2456,"/Product/number 456789"` thay vì hai dòng riêng lẻ không? Trong mọi trường hợp, câu trả lời của tôi dưới đây sẽ hoạt động.
Điểm:3
lá cờ hr

Đối với dữ liệu có cấu trúc (tức là dữ liệu có thể mô tả dưới dạng Hồ sơ bao gồm các dấu phân cách lĩnh vực) Tôi muốn đề xuất một công cụ như awk:

awk -F, 'BEGIN{OFS=FS} {$2 = "\"" $2 "\""} {print}' tệp

hoặc (gọn hơn - sử dụng tác vụ in mặc định)

awk -F, 'BEGIN{OFS=FS} {$2 = "\"" $2 "\""} 1' tệp

nếu bạn Thực ra cần phải làm điều đó một cách tự nhiên trong bash, sau đó

trong khi IFS=, đọc -r a b; làm printf '%s,"%s"\n' "$a" "$b"; xong < tập tin

(nhưng đừng - xem Tại sao sử dụng vòng lặp trình bao để xử lý văn bản được coi là thông lệ không tốt?).

Điểm:2
lá cờ bo
Bạn có thể làm điều này bằng cách sử dụng biểu thức chính quy perl và bạn có thể thay thế tương tự như sử dụng sed.

Giả sử bạn sẽ luôn có /sản phẩm/số theo sau là một nhóm chữ số, bạn có thể sử dụng lệnh sau để in các thay đổi:

perl -pe 's|/Product/number (\d+)|"$&"|g' tên tệp

Nếu bạn hài lòng với đầu ra, bạn có thể sử dụng lệnh sau để chỉnh sửa tệp:

perl -pi -e 's|/Product/number (\d+)|"$&"|g' tên tệp
  • (\d+) khớp với bất kỳ nhóm gồm một hoặc nhiều chữ số
  • $& phản hồi toàn bộ chuỗi phù hợp, tương tự như sử dụng & Trong sed

Ngoài ra, tôi sử dụng | như một dấu phân cách thay vì / bởi vì chuỗi chứa dấu gạch chéo về phía trước.


Ngoài ra, bạn có thể sử dụng sed bằng cách sử dụng lệnh sau để in:
sed -Ee 's|/Product/number [[:digit:]]+|"&"|g' filenameme

hoặc lệnh sau để thực sự chỉnh sửa các thay đổi đối với tệp:

sed -Ei 's|/Product/number [[:digit:]]+|"&"|g' filenameme

Lệnh này sử dụng tùy chọn biểu thức chính quy mở rộng -E

  • [[:chữ số:]]+ khớp với một nhóm gồm một hoặc nhiều chữ số
  • & phản hồi toàn bộ chuỗi phù hợp
Điểm:0
lá cờ cn

Nếu dữ liệu của bạn thực sự đơn giản như bạn trình bày, tất cả những gì bạn muốn là thêm một ký tự trích dẫn kép sau dấu phẩy đầu tiên và sau ký tự cuối cùng của mỗi dòng. Nếu vậy, chỉ cần làm:

$ sed 's/,/,"/; s/$/"/' tập tin
1234,"/Sản phẩm/số 234567"
2456,"/Sản phẩm/số 456789"

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.