我有一行文件:
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,但我不知道该怎么做。 我该怎么做?请帮忙。
答案 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