【发布时间】:2020-03-28 05:34:29
【问题描述】:
我有一个包含以下记录的文件
user1,fuser1,luser1,user1@test.com,data,user1
user2,fuser2,luser2,user2@test.com,data,user2
user3,fuser3,luser3,user3@test.com,data,user3
我想从
执行一些文本替换user1,fuser1,luser1,user1@test.com,data,user1
到
New_user1,New_fuser1,New_luser1,New_user1@test.com,data,New_user1
所以我写了下面的 sed 脚本。
sed -i -e 's/user/New_user/g; s/fuser/New_fuser/g; s/luser/New_luser/g' file
这很完美。现在我有一个要在特定行范围内替换的要求。
start=2
end=3
sed -i -e ''${start},${end}'s/user/New_user/g; s/fuser/New_fuser/g; s/luser/New_luser/g' file
但此命令正在替换所有行中的模式。示例输出是,
user1,New_fuser1,New_luser1,user1@test.com,data,New_user1
user2,New_fuser2,New_luser2,user2@test.com,data,New_user2
user3,New_fuser3,New_luser3,user3@test.com,data,New_user3
看起来范围仅应用于第一个表达式,而其余表达式则应用于整个文件。如何将此范围应用于所有表达式?
【问题讨论】:
-
我不认为
sed脚本工作完美:New_user1,fNew_user1,lNew_user1。您对该输入数据的预期输出是什么?