我是sed的新手,我正在尝试一些sed表达式:
我有多个文件与模式行:
ABC * 123
ABC * 245
ABC * 456
表示字符串乘以某个整数。
我需要用常数整数
替换所有整数值ABC * 25
ABC * 25
ABC * 25
我试过:
sed 's/\(ABC\s+\*\s+\)[0-9]+/1 25/g' myfile.txt
但它什么都不做,并返回相同的文件作为输出。
文件也有其他文字。行也有一些其他文本。
答案 0 :(得分:1)
您的sed
方言可能无法理解空白\s
和/或+
一次或多次重复。你也忘记了反射的反斜杠。
sed 's/\(ABC \+\* \+\)[0-9]\+/\125/g' myfile.txt
这不能处理标签,如果它不接受,您可能不得不摆弄\+
。
最便携的解决方案可能是使用Perl。
perl -pe 's/(ABC\s+\*\s+)\d+/$125/' myfile.txt
答案 1 :(得分:0)
您可以使用awk
awk '/ABC/ {$3="25"}1' myfile.txt
ABC * 25
ABC * 25
ABC * 25
这是一个更新,可以在行
中的任何位置更改ABC之后的数字cat file
ABC * 123
sometext ABC * 245
some more ABC * 456 not my text
awk '{for (i=1;i<=NF;i++) if ($i=="ABC") $(i+2)="25"}1' file
ABC * 25
sometext ABC * 25
some more ABC * 25 not my text
gnu awk
版本
awk '{print gensub(/(ABC \* )[0-9]+/,"\\125","g")}' file
ABC * 25
sometext ABC * 25
some more ABC * 25 not my text
答案 2 :(得分:0)
sed '/[[:alpnum]][[:space:]]*// s/\([[:space:]]\{1,\}\)[[:digit:]]\{1,}$/\125/' myfile.txt
如果所有行都像样本一样多个
sed 's/\([[:space:]]\{1,\}\)[[:digit:]]\{1,}$/\125/' myfile.txt
答案 3 :(得分:0)
如果您的数字部分始终位于该行的末尾,则可以执行以下操作:
sed -e "s/[0-9]*$/25/"
表示“用25”替换行尾的多个数字
或者如果数字总是被空格包围:
sed -e "s/\s[0-9]*\s/25/"