如何使用sed将字符串替换为数字?

时间:2019-05-30 17:24:40

标签: linux shell sed

我正在尝试将字符串替换为文件中的数字 所以,我有变量&FLOW,需要更改为001,例如:

cat file.txt
This is file ' PISP &FLOW'
PISD.DATA.CYCLE&FLOW..ONE

所需的输出

This is file ' PISP 001'
PISD.DATA.CYCLE001.ONE

我在脚本中尝试了以下命令:

for item in file.txt
do
sed 's/\&FLOW/\./001/g' $item
sed 's/\&FLOW/001/g' $item
done

出现错误。第二个sed命令正在运行,但是我需要先运行开始的sed命令,否则先运行第二个sed命令后,它将忽略开始的sed命令。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

尝试一下:

for item in file.txt
do
  sed 's/\&FLOW\./001/g' $item
  sed 's/\&FLOW/001/g' $item
done

/之后,您有一个多余的FLOW

这也可能起作用:

  sed -i 's/\&FLOW[\.]?/001/g' file.txt

答案 1 :(得分:1)

使用单个sed命令并使用-i来实际修改文件内容,您需要将file.txt作为sed命令的输入:

sed -i 's/&FLOW\.\{0,1\}/001/g' file.txt

请参见online demo。如果在Mac OS中使用它,则需要sed -i '' 's/&FLOW\.\{0,1\}/001/g' file.txt。另请参见sed edit file in place

模式详细信息

这是符合POSIX BRE的模式匹配

  • &FLOW-文字&FLOW子字符串
  • \.\{0,1\}-出现.个字符的0或1。