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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |