Đây chắc chắn là một trường hợp bạn muốn sử dụng cái gì đó như sed
(hoặc awk
hoặc perl
) thay vì đọc một dòng tại một thời điểm trong vòng kết nối. Đây không phải là loại vỏ mà hoạt động tốt hay hiệu quả.
Bạn có thể thấy tiện dụng khi viết chức năng có thể tái sử dụng. Dưới đây là một đơn giản, mặc dù nó sẽ không làm việc trên văn bản đầy đủ tùy ý (dấu gạch chéo hoặc metacharacters biểu thức chính quy sẽ nhầm lẫn giữa việc):
function insertAfter # file line newText
{
local file="$1" line="$2" newText="$3"
sed -i -e "/^$line$/a"$'\\\n'"$newText"$'\n' "$file"
}
Ví dụ:
$ cat foo.txt
Now is the time for all good men to come to the aid of their party.
The quick brown fox jumps over a lazy dog.
$ insertAfter foo.txt \
"Now is the time for all good men to come to the aid of their party." \
"The previous line is missing 'bjkquvxz.'"
$ cat foo.txt
Now is the time for all good men to come to the aid of their party.
The previous line is missing 'bjkquvxz.'
The quick brown fox jumps over a lazy dog.
$
Nguồn
2012-11-09 22:11:16
rằng sẽ không làm việc; bạn cần một dấu gạch chéo ngược và một dòng mới trong chuỗi lệnh sed sau 'a', không phải là dấu cách. –