Điểm:1

Gửi các biến tập lệnh bash tới sed

lá cờ vn

người đăng lần đầu tiên ở đây và tôi đã tìm kiếm khá lâu nhưng không tìm thấy chủ đề mà tôi có thể hiểu đủ rõ để giải quyết vấn đề của mình.

Tôi có một vòng lặp trong tập lệnh của mình tạo ra một số biến nhất định thông qua phân định cut -d và tôi muốn sử dụng các biến đó làm đầu vào cho sed để thay đổi một tệp khác nhau trong mỗi lần lặp lại. Kịch bản hiện tại của tôi là:

kịch bản hiện tại của tôi trông giống như:

cho đầu vào bằng $(tail -n 3 filea)
làm
        a="$(echo $input | cut -d "," -f 1)"
        b="$(echo $input | cut -d "," -f 2)"
        c="$(echo $input | cut -d "," -f 3)"

        tiếng vang $a
        tiếng vang $b
        tiếng vang $c

        đuôi -n 1 fileb | sed 's,'$a','$c',2'
xong

Với đầu ra là:

K
26
t
KTTTXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
P
27
e
KKTxxxxxxxxxxxxxxxxxxxxxxxxxxx
S
31
P
KKTxxxxxxxxxxxxxxxxxxxxxxxxxxx

Ví dụ, chuỗi ở vị trí 31 nên được thay thế bằng S nếu đó là P.

Trạng thái hiện tại của tôi là tôi nhận được các biến a và c được chuyển chính xác vào lệnh sed và các chuỗi tương ứng được thay thế nhưng thay đổi nó thành sed 's,'$a','$c','$b'' dừng bất kỳ sự thay thế nào và dòng fileb gốc (cuối cùng) được nhắc.

Tôi biết rằng đặt một câu hỏi hay là một chủ đề hoàn toàn khác, nhưng tôi hy vọng ai đó có thể giúp tôi hiểu cách viết ở đây để tôi có thể tiếp tục học lập trình vì tôi thường mắc phải những lỗi như thế này.

hesey avatar
lá cờ vn
Tôi đếm được 8 trích dẫn, một số chẵn. Làm thế nào cái cuối cùng có thể là một trích dẫn không được tiết lộ?
lá cờ hr
Rất tiếc, bạn nói đúng - xin lỗi
hesey avatar
lá cờ vn
Chắc chắn là nhiều quote quá :D Nhưng vẫn cảm ơn bạn đã quan tâm giúp đỡ!
Điểm:1
lá cờ cn

Ghi chú:

Được cho:

$ mèo tập tin
K,26,T
P,27,E
S,31,P

$ cat fileb
-------------------------TE---P---

sau đó

đuôi -n 3 tập tin | trong khi IFS=, đọc ký tự vị trí thay thế -r; làm
    printf -v regex '^(.{%d})%s' $((vị trí - 1)) "$character"
    printf -v repl '\1%s' "$replacement"

    tiếng vang "$ regex"
    tiếng vang "$repl"

    đuôi -n 1 fileb
    đuôi -n 1 fileb | sed -E "s/$regex/$repl/"
xong

đầu ra:

^(.{25})T
\1K
-------------------------TE---P---
-------------------------KE---P---
^(.{26})E
\1P
-------------------------TE---P---
-------------------------TP---P---
^(.{30})P
\1S
-------------------------TE---P---
-------------------------TE---S---

Nhưng, đây là điều mà bash có thể làm mà không cần sed, sử dụng ${var:offset:length} hình thức Mở rộng tham số:

đuôi -n 3 tập tin | trong khi IFS=, đọc ký tự vị trí thay thế -r; làm
    echo "$replacement $location $character"
    dòng=$(đuôi -n 1 fileb)
    tiếng vang "$ dòng"
    nếu [[ "${dòng:vị trí - 1:1}" == "$ký tự" ]]; sau đó
        line=${line:0:position - 1}${replacement}${line:position}
    fi
    tiếng vang "$ dòng"
xong

đầu ra

K 26 T
-------------------------TE---P---
-------------------------KE---P---
Trang 27 E
-------------------------TE---P---
-------------------------TP---P---
S 31 P
-------------------------TE---P---
-------------------------TE---S---
hesey avatar
lá cờ vn
Thật không may, tôi đã mắc một lỗi nhỏ khi gõ "được thay thế bằng S nếu đó là P" trong khi lẽ ra nó phải là "được thay thế bằng P nếu đó là S", nhưng tôi đã hiểu cách tiếp cận thứ hai của bạn và viết lại cho tôi. Cám ơn rất nhiều!

Đă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.