【问题标题】:grep specific variable from output and replace value with another linux从输出中grep特定变量并用另一个linux替换值
【发布时间】:2021-09-24 01:47:07
【问题描述】:

我正在尝试使用以下命令获取 bash 中两个不同符号之间的变量名称:

nfs4_getfacl .| grep -E ":.:.*:"

这些是得到的字符串:

A:fdg:user@server:rxtTncC
A:g:user@server:xtcy
A:d:1111:xtcy

我正在尝试替换值 1111 或我在列表中遇到的任何其他数值,根据 nfs4 权限,这通常是第三个位置,但不一定总是这样:

1111 -> replaced_value

A:fdg:user@server:rxtTncC
A:g:user@server:xtcy
A:d:replaced_value:xtcy

【问题讨论】:

  • 它会一直是您想要替换的第 3 行吗?如果没有,请提及在行上应用新变量的条件是什么?
  • @RavinderSingh13 我已经更新了问题,抱歉混淆了

标签: shell awk grep nfs


【解决方案1】:

使用您展示的样品,请关注。您可以在单个 awk 本身中执行此操作,我们不需要在这里使用 grep。根据您的需要设置newValue变量的值,然后它将相应地替换值。

nfs4_getfacl .| 
awk -v newValue="newVALUE" 'BEGIN{FS=OFS=":"} /:.:.*:/ && $3~/^[0-9]+$/{$3=newValue} 1'

说明:为上述代码添加详细说明。

awk -v newValue="newVALUE" '  ##Getting nfs4_getfacl output as input to awk program, creating newValue variable which has new value in it.
BEGIN{ FS=OFS=":" }           ##Setting field separator and output field separator as : here.
/:.:.*:/ && $3~/^[0-9]+$/{    ##Check if line contains :.:.*: format AND 3rd column is digits.
  $3=newValue                 ##Then set newValue value to 3rd column here.
}
1                             ##printing edited/non-edited lines here.
'

【讨论】:

  • 我有一个问题,是否可以将 nfs4 值保存到一个新的文本文件,在那里编辑并保存?也许是这样的? nfs4_getfacl 。 > facl_list.txt | awk -v newValue="newVALUE" 'BEGIN{FS=OFS=":"} /:.:.*:/ && $3~/^[0-9]+$/{$3=newValue} 1' | > new_facl_list.txt
  • 附加评论,不幸的是,我需要替换超过第三行,这就是$3 存在的原因吗?抱歉,我仍然习惯于 bash 脚本,因此我的问题很幼稚。
  • @Joe_Informatics,当然为什么不,在这种情况下运行程序,如:awk -v newValue="newVALUE" 'BEGIN{FS=OFS=":"} /:.:.*:/ && $3~/^[0-9]+$/{$3=newValue} 1' facl_list.txt 这应该很好给你输出,干杯。
  • 谢谢,现在将进行测试并跟进任何其他问题,非常感谢您的帮助!
  • @Joe_Informatics,我们的欢迎、欢呼和快乐的学习。
猜你喜欢
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 2019-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多