加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – sed替换特定行号的特定列号值

发布时间:2020-12-14 01:35:18 所属栏目:Linux 来源:网络整理
导读:我有一个5列csv文件(空格分隔),如下所示: username1 20130310 enabled 20130310 enabledusername2 20130310 enabled 20130321 disabledusername3 20130320 disabled 20130321 enabledusername4 20130310 disabled 20130310 disabled 我试图更改username4的
我有一个5列csv文件(空格分隔),如下所示:

username1 20130310 enabled 20130310 enabled
username2 20130310 enabled 20130321 disabled
username3 20130320 disabled 20130321 enabled
username4 20130310 disabled 20130310 disabled

我试图更改username4的第4列的值.

我的脚本已经获取了用户名4存储的行号和新值:所以我想用行号$lineNumber的$newValue替换第4列值.

在我的样本中:

newValue=anything
lineNumber=4

这样它将呈现:

username1 20130310 enabled 20130310 enabled
username2 20130310 enabled 20130321 disabled
username3 20130320 disabled 20130321 enabled
username4 20130310 disabled anything disabled

我计划使用sed而不是awk,因为使用sed我们可以使用-i进行内联更改

解决方法

这是一种方式:

$sed '/^username4/{s/ [^ ]*/ anything/3}' file
username1 20130310 enabled 20130310 enabled
username2 20130310 enabled 20130321 disabled
username3 20130320 disabled 20130321 enabled
username4 20130310 disabled anything disabled

# store changes back to the file 
$sed -i '/^username4/{s/ [^ ]*/ anything/3}' file

但是因为sed具有-i选项而避免使用awk并不是一个好理由. awk更适合处理这类问题.

$awk '$1=="username4"{$4="anything"}1' file
username1 20130310 enabled 20130310 enabled
username2 20130310 enabled 20130321 disabled
username3 20130320 disabled 20130321 enabled
username4 20130310 disabled anything disabled

# store changes back to the file
$awk '$1=="username4"{$4="anything"}1' file > tmp && mv tmp file

使用awk,您可以轻松地进行字段比较和编辑,使用shell变量不是引用噩梦,并且理解您昨天写的脚本不是和sed不同的问题:

$linenumber=4

$newvalue=anything 

$awk 'NR==n{$4=a}1' n=$linenumber a=$newvalue file 
username1 20130310 enabled 20130310 enabled
username2 20130310 enabled 20130321 disabled
username3 20130320 disabled 20130321 enabled
username4 20130310 disabled anything disabled

$awk 'NR==n{$4=a}1' n=$linenumber a=$newvalue file > tmp && mv tmp file

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读