我有一個帶有混合shell,Perl和Python腳本的Linux文件夾樹。沒有任何腳本具有一致的文件擴展名(根本沒有.pl,.perl,.py,.sh或沒有擴展名)。我需要確定哪些文件是Perl腳本,然後添加一行新的代碼來設置變量,如果該變量不在Perl腳本中。如何用Bash腳本在perl腳本中插入新的代碼行
感謝How to insert newline character after comma in `),(` with sed?我想出了這個代碼,它使用sed來插入新的代碼行。
此代碼有效,但有沒有更有效的方法呢?
#! /bin/bash
NL='
$|++'
for f in `find "$1" -type f`
do
if [ $(grep -cP "^\#\!/.+/perl" "${f}") -gt 0 ]
then
if [ $(grep -c "$|" "${f}") -eq 0 ]
then
sed -i -r "s/^#!\/(.+)\/perl(.+)$/#!\/\1\/perl\2\\${NL}/g" "${f}"
fi
fi
done
謝謝Tripleee。這要快得多,因爲grep不會用-q搜索整個文件。爲什麼我有/ g?因爲我不知道我在做什麼:)是的,我用你的建議替代方案。請注意,您的替換會添加一個額外的「#!/」,因爲它是在該組中捕獲的。我刪除它。再次感謝。 – tahoar
糟糕;固定。感謝您的注意。 – tripleee