我需要替换一个数值,该数值出现在一系列配置文件的特定行中,其格式如下:
字符串number_1 number_to_replace数字_2
我想获得这样的东西:
字符串number_1 number_replaced number_2
我遇到的困难是:
到目前为止,我最接近的尝试是:
echo "field 4 4 4" | sed 's/\s4\s/3/'
哪些产出:
field34 4
这很接近,因为我要替换中间数字,所以我添加了另一个“ \ s”以尝试使用行以字符开头的已知事实。
echo "field 4 4 4" | sed 's/\s\s4\s/3/'
哪个给:
field 4 4 4
因此,这次没有任何替换。我该如何进行?进行一些详细的解释将是理想的,因为我的知识是替换包含几乎为零的模式的表达式。 谢谢。
答案 0 :(得分:1)
您可以执行以下操作,与示例中的数字完全匹配。您可以将3
替换为您选择的任意数字。
sed 's/\([0-9]\{1,\}\)[[:space:]]\([0-9]\{1,\}\)[[:space:]]\([0-9]\{1,\}\)/\1 3 \3/'
请注意,我已经使用POSIX括号表达式来匹配您正在使用的sed
的任何变体中都应支持的空格字符。请注意,\s
仅在GNU变体中受支持。
正则表达式定义的字面意思是匹配一个数字,后跟一个空格,然后是一个数字,一个空格和另一个数字。捕获的组从\1
存储。由于您打算删除2 nd 位,因此将其替换为您选择的单词。
如果多余的转义符导致其无法读取,请使用-E
标志以获得扩展的正则表达式支持。我使用了默认的BRE version