以下是我想做的事情:
我有一个空格分隔的文件,我有一个整数数组。我需要为数组中的每个元素搜索文件的每一行(inv.txt)。如果找到模式,我需要保留该行的前7个字符,并用“0; 0;”替换其余字符。
我对脚本非常陌生,到目前为止我尝试过的是:(我想我已经偏离了轨道)
removing=(3199 26543)
for line in inv.txt
do
for i in "${#removing[@]}"
do
sed -i "s/${removing[$1]/c\ ${line:0,7} 0; 0;/g inv.txt
done
done
这给了我一个sed -e表达式#1 char 0:之前没有正则表达式 我怀疑这是完成任务的最佳方式(如果它会的话)......任何帮助都表示赞赏,提前谢谢!
编辑:我正在使用一个数组,因为它实际上会包含几千个条目!我为此场景添加的两个仅用于测试。
答案 0 :(得分:3)
你实际上可以使用一个sed(如果它支持-r):
sed -rie '/3199|26543/s/^(.{7}).*/\1\t0;\t0;/' inv.txt
使用数组:
#!/bin/bash
removing=(3199 26543)
( IFS='|'; sed -rie "/${removing[*]}/s/^(.{7}).*/\\1\\t0;\\t0;/" inv.txt; )
答案 1 :(得分:0)
您可以尝试这样的事情:
removing=(3199 26543)
>output
while read line
do
for i in "${removing[@]}"
do
if [[ "$line" =~ ^.*\ ${i}\ ]]; then
echo "${line:0:7} 0; 0;" >> output
else
echo "$line" >> output
fi
done
done < inv.txt
# you can uncomment below mv command if you want to overwrite inv.txt
# mv output inv.txt
答案 2 :(得分:0)
sed -i '/3199\|26543/s/^\(.\{7\}\).*/\1\t0\t0/' inv.txt