簡體   English   中英

在sed命令中需要幫助來搜索和替換字符串模式

[英]need help in sed command to search and replace a string pattern

我是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

但它什么也不做,並返回與輸出相同的文件。

文件也有其他文本。 另外,行也有其他一些文本。

您的sed方言對於空格可能不理解\\s ,對於一個或多個重復而言可能不理解+ 您也忘記了反引用的反斜杠。

sed 's/\(ABC \+\* \+\)[0-9]\+/\125/g' myfile.txt

這不能解決制表符,並且如果它也不接受\\+則可能不得不擺弄\\+

最可移植的解決方案可能是改用Perl。

perl -pe 's/(ABC\s+\*\s+)\d+/$125/' myfile.txt

你可以使用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
sed '/[[:alpnum]][[:space:]]*// s/\([[:space:]]\{1,\}\)[[:digit:]]\{1,}$/\125/' myfile.txt

如果所有行都像您的樣本一樣多

sed 's/\([[:space:]]\{1,\}\)[[:digit:]]\{1,}$/\125/' myfile.txt

如果數字部分始終位於行的末尾,則可以執行以下操作:

sed -e "s/[0-9]*$/25/"

上面寫着“用25替換行尾的多個數字”

或者,如果數字始終被空格包圍:

sed -e "s/\s[0-9]*\s/25/"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM