我有一些文件,其中缺少的数据以'+'插入。所以行看起来像这样:
substring1+++++substring2++++++++++++++substring3+substring4
我想用'MISSING'代替所有'+'> 5的重复。这使我的团队更易读,并且更容易查看丢失的数据与输入为“ +”的数据之间的差异(最多允许5个)。 到目前为止,我有:
while read l; do
echo "${l//['([+])\1{5}']/'MISSING'}"
done < /path/file.txt
,但这将每个“ +”替换为“ MISSING”。我只需要说一次“ MISSING”即可。
谢谢。
答案 0 :(得分:4)
您不能在Bash变量扩展中使用正则表达式。
您可以在循环中使用
sed 's/+\{1,\}/MISSING/g' <<< "$l"
或者,您可以直接在文件上使用sed
sed 's/+\{1,\}/MISSING/g' /path/file.txt
+\{1,\}
POSIX BRE模式与文字+
(+
)匹配1次或多次(\{1,\}
)。
sed 's/+\{1,\}/MISSING/g' <<< "substring1+++++substring2++++++++++++++substring3+substring4"
# => substring1MISSINGsubstring2MISSINGsubstring3MISSINGsubstring4
如果您需要对同一文件进行更改,请使用sed edit file in place中所述的任何技术。