خطوط التصفية حسب النمط في نص باش
سؤال
لديّ متغيرين ، أحدهما مع نص ، وآخر مع أنماط. وأريد تصفية الخطوط ، والأنماط المتطابقة. كيف أقوم بذلك؟
السيناريو يبدو هكذا
# get ignore files list
IGNORE=`cat ignore.txt`
# get changed files list
CHANGED=`git diff --name-only $LAST_COMMIT HEAD`
# remove files, that should be ignored from change list
for IG in $IGNORE; do
echo $CHANGED
$CHANGED=`cat $CHANGED | grep -v $IG`
done
المحلول
يمكنك توفير ملف النمط مباشرة إلى GREP
# get changed files list and remove files that should be ignored
CHANGED=$(git diff --name-only $LAST_COMMIT HEAD | grep -vf ignore.txt)
echo $CHANGED
(أوصي باستخدام $()
بدلا من backticks.)
بالمناسبة ، هذا الخط:
$CHANGED=`cat $CHANGED | grep -v $IG`
ربما تبدو هكذا:
CHANGED=`echo $CHANGED | grep -v $IG`
إذا كنت ستحتفظ بها.
نصائح أخرى
# Disable globbing
set -f
# Collect variables
IGNORE=$(cat ignore.txt)
CHANGED=$(...)
# Apply each pattern in turn
for pattern in $IGNORE
do
# Reset the current list of candidates
CANDIDATES=
for candidate in $CHANGED
do
# Apply the pattern
CANDIDATES="$CANDIDATES ${candidate%$pattern}"
done
# Update the CHANGED list
CHANGED=$CANDIDATES
done
لا تنتمي إلى StackOverflow