username1 20130310 enabled 20130310 enabledusername2 20130310 enabled 20130321 Disabledusername3 20130320 Disabled 20130321 enabledusername4 20130310 Disabled 20130310 Disabled
我试图更改username4的第4列的值.
我的脚本已经获取了用户名4存储的行号和新值:所以我想用行号$lineNumber的$newValue替换第4列值.
在我的样本中:
newValue=anythinglineNumber=4
这样它将呈现:
username1 20130310 enabled 20130310 enabledusername2 20130310 enabled 20130321 Disabledusername3 20130320 Disabled 20130321 enabledusername4 20130310 Disabled anything Disabled
我计划使用sed而不是awk,因为使用sed我们可以使用-i进行内联更改
解决方法 这是一种方式:$sed '/^username4/{s/ [^ ]*/ anything/3}' fileusername1 20130310 enabled 20130310 enabledusername2 20130310 enabled 20130321 Disabledusername3 20130320 Disabled 20130321 enabledusername4 20130310 Disabled anything Disabled# store changes back to the file $sed -i '/^username4/{s/ [^ ]*/ anything/3}' file
但是因为sed具有-i选项而避免使用awk并不是一个好理由. awk更适合处理这类问题.
$awk '=="username4"{="anything"}1' fileusername1 20130310 enabled 20130310 enabledusername2 20130310 enabled 20130321 Disabledusername3 20130320 Disabled 20130321 enabledusername4 20130310 Disabled anything Disabled# store changes back to the file$awk '=="username4"{="anything"}1' file > tmp && mv tmp file
使用awk,您可以轻松地进行字段比较和编辑,使用shell变量不是引用噩梦,并且理解您昨天写的脚本不是和sed不同的问题:
$linenumber=4$newvalue=anything $awk 'NR==n{=a}1' n=$linenumber a=$newvalue file username1 20130310 enabled 20130310 enabledusername2 20130310 enabled 20130321 Disabledusername3 20130320 Disabled 20130321 enabledusername4 20130310 Disabled anything Disabled$awk 'NR==n{=a}1' n=$linenumber a=$newvalue file > tmp && mv tmp file总结
以上是内存溢出为你收集整理的linux – sed替换特定行号的特定列号值全部内容,希望文章能够帮你解决linux – sed替换特定行号的特定列号值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)