我試圖放在一起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