【发布时间】:2019-08-26 08:32:35
【问题描述】:
在 sed 中,我对某个范围内的行进行了一些修改,但倒数第二行需要特殊修改,而其他行不需要。所以我的问题是如何检测范围内的倒数第二行?
我有这样的数据:
a,
b,
c,
KEY1,
d,
e,
f,
KEY2,
g,
h,
i,
...
实际上我只能为 KEY1 和 KEY2 之间的每一行加上“version1”:
a,
b,
c,
KEY1,
version1_d,
version1_e,
version1_f,
KEY2,
g,
h,
i,
我的代码:
echo "a, b, c, KEY1, d, e, f, KEY2, g, h, i," | tr " " "\n" | \
sed '
/KEY1/,/KEY2/ {
/KEY1/ n
$ s/.*/version2_&/
/KEY2/! s/.*/version1_&/
}
'
我尝试在范围内使用“$”,但它搜索文件的真正最后一行。
我想得到:
a,
b,
c,
KEY1,
version1_d,
version1_e,
version2_f,
KEY2,
g,
h,
i,
也就是说,对字母“f”的不同修改,即范围 /KEY1/,/KEY2/ 的倒数第二行
我考虑过使用“N”并检查模式空间是否包含 'f,\nKEY2' 但是,如果范围内的行数是偶数(这在我的情况下是可能的)并且我没有也不知道怎么做 x)。
【问题讨论】: