我试图放在一起bash脚本,将搜索一堆文件,如果它发现一个文件中的特定字符串,它会在该行后添加一个新行然后转到下一个文件。bash,在一行后添加字符串
#! /bin/bash
echo "Creating variables"
SEARCHDIR=testfile
LINENUM=1
find $SEARCHDIR* -type f -name *.xml | while read i; do
echo "Checking $i"
ISBE=`cat $i | grep STRING_TO_SEARCH_FOR`
if [[ $ISBE =~ "STRING_TO_SEARCH_FOR" ]] ; then
echo "found $i"
cat $i | while read LINE; do
((LINENUM=LINENUM+1))
if [[ $LINE == "<STRING_TO_SEARCH_FOR>" ]] ; then
echo "editing $i"
awk -v "n=$LINENUM" -v "s=new line to insert" '(NR==n) { print s } 1' $i
fi
done
fi
LINENUM=1
done
我遇到麻烦位
awk -v "n=$LINENUM" -v "s=new line to insert" '(NR==n) { print s } 1' $i
如果我只是用$ I末,它将输出内容到屏幕上,如果我使用$i > $i
那么它将只擦除文件,如果我使用$i >> $i
它将陷入循环,直到磁盘填满。
有什么建议吗?
然后就重定向到一个临时文件,然后将其移动到您的原始文件。另外,我猜你的代码可以使用正确的工具减少很多。一个'find'和'awk'应该或多或少够用,而你使用很多不同的东西。 – fedorqui