ý nghĩa của lệnh sed này là gì: `; / @ / {h; s / test / next / g; x; G}`?


9
sed -e 's/72;/72, next_val = 0x11111111;/;/@/{h;s/test/next/g;x;G}'
fmt_vuln.c > fmt_vuln2.c

bạn có thể cho tôi biết ý nghĩa của nó là ;/@/{h;s/test/next/g;x;G}gì?

Câu trả lời:


6
;/@/{h;s/test/next/g;x;G}? 

/@/  search for an `@` sign
{}   for the lines where that is true do this 'block' of code
h    put the pattern match in the hold space
s/   substitute test for next everywhere in the space
g    do the previous substitution for all matches on the line
x    swap the hold with the pattern space
G    Add a new line with the contents of the hold space.

hoàn toàn giải quyết vấn đề của tôi thông qua câu trả lời của bạn. cảm ơn bạn ^^
Thomas Kwon

6
/@/ # For pattern-space containing the character @ do the following
{
  h              # place a copy of the pattern-space into the hold-space
  s/test/next/g  # replace all instances of "test" with "next" in the pattern-space
  x              # swap the pattern-space with the hold-space
  G              # append a newline followed by contents of hold-space to the pattern-space
}

Vì vậy, đối với mỗi dòng chứa @, phiên bản sửa đổi của không gian mẫu sẽ được in theo sau là bản gốc (không gian giữ chứa phiên bản chưa sửa đổi).

xem Tóm tắt lệnh cho Sed


Cảm ơn bạn rất nhiều :) câu trả lời của bạn thực sự hữu ích cho tôi. ^^
Thomas Kwon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.