如何更改文件行中的模式

时间:2017-01-04 07:53:52

标签: regex bash

我有一行文件:

22:50133-MM:MM1,52-MM:MM2;23:254940-MM:MM1,63-MM:MM2;24:15574-MM:MM1,65-MM:MM2;

我需要找到第24:15574-MM行的这一部分,然后将数字15574替换为另一个。数字可以是任意长度。

我想使用bash,但我不知道该怎么做。 我该怎么做?请帮忙。

2 个答案:

答案 0 :(得分:1)

使用带有sed选项的-i命令可以轻松实现:

new_number=11111
sed -i "s/24:\(15574\)-MM/24:$new_number-MM/" /tmp/test.txt

/tmp/test.txt - 替换为您当前的文件路径

new_number - 是替换号码的变量

要使用regexp模式替换,请使用以下命令并启用-E选项(扩展正则表达式模式):

sed -i -E "s/24:(15574)-MM/24:$new_number-MM/" /tmp/test.txt

答案 1 :(得分:1)

由于您要求我想使用bash ,所以此处尝试仅使用本机运算符;使用regEx功能及其~运算符(从bash 3.0开始支持)。

假设您的文件中只有一行,您可以执行以下步骤,

  • 以下命令可以直接在命令行(或)
  • 上运行
  • 使用bash she-bang(#!/bin/bash)将其封装在一个shell脚本中。

使用regEx捕获<file匹配的文件内容,fileContent=$(<file) [[ $fileContent =~ .*24:([[:digit:]]+)-MM.* ]] && replacement="${BASH_REMATCH[1]}" replaceValue=5555 printf "%s\n" "${fileContent/$replacement/$replaceValue}" 将整个文件内容存储在变量中。

22:50133-MM:MM1,52-MM:MM2;23:254940-MM:MM1,63-MM:MM2;24:5555-MM:MM1,65-MM:MM2;

对于您的输入文件,命令会产生结果

XPath