下面的代碼不在中工作在bashrc中,但是在其他參數爲null的終端中工作。bashrc中的代碼不起作用
search() {
find $1 -type f | egrep '(.$2|.$3|.$4|.$5|.$6|.$7|.$8|.$9|.$10)'
}
下面的代碼不在中工作在bashrc中,但是在其他參數爲null的終端中工作。bashrc中的代碼不起作用
search() {
find $1 -type f | egrep '(.$2|.$3|.$4|.$5|.$6|.$7|.$8|.$9|.$10)'
}
這樣寫:
search() {
find "$1" -type f \(-true \
-o -name "*$2*" \
-o -name "*$3*" \
-o -name "*$4*" \
-o -name "*$5*" \
-o -name "*$6*" \
-o -name "*$7*" \
-o -name "*$8*" \
-o -name "*$9*" \
-o -name "*$10*" \
\)
}
egrep
將創建一個基於行的匹配結果,該結果不如上述那樣精確。它也比較慢。如果上述語句不完全符合您的需要,請記住除了-name的模式匹配之外,GNU find還有正則表達式謂詞。沒有必要管道到grep
。您可以通過構建參數find
來擴展上述函數以獲取無限數量的參數,如this answer。
我不知道egrep獲取文字$2
而不是參數。我解決了這個代碼:
search-type() {
case "$#" in
1) echo "Missing arguments";;
2) find $1 -type f | egrep '(.'$2')';;
3) find $1 -type f | egrep '(.'$2'|.'$3')';;
4) find $1 -type f | egrep '(.'$2'|.'$3'|.'$4')';;
5) find $1 -type f | egrep '(.'$2'|.'$3'|.'$4'|.'$5')';;
6) find $1 -type f | egrep '(.'$2'|.'$3'|.'$4'|.'$5'|.'$6')';;
7) find $1 -type f | egrep '(.'$2'|.'$3'|.'$4'|.'$5'|.'$6'|.'$7')';;
8) find $1 -type f | egrep '(.'$2'|.'$3'|.'$4'|.'$5'|.'$6'|.'$7'|.'$8')';;
9) find $1 -type f | egrep '(.'$2'|.'$3'|.'$4'|.'$5'|.'$6'|.'$7'|.'$8'|.'$9')';;
10) find $1 -type f | egrep '(.'$2'|.'$3'|.'$4'|.'$5'|.'$6'|.'$7'|.'$8'|.'$9'|.'$10')';;
11) echo "Many arguments";;
esac;
}
@kojiro代碼不起作用。
是否可以用正則表達式簡化這段代碼?
謝謝你們!
我更改了更多東西的代碼簡單和清除;並與任何數量的參數一起工作。
search-type() {
# Flags
flag=0
fld=1
for x in "[email protected]"
do
# The first parameter is the directory; ignored!
if [ $fld = 1 ]; then
fld=0
else
# Verify if have more than one file
if [ $flag = 0 ]; then
cmd='-name '$x
flag=1
else
cmd+=' -o -name '$x
fi
fi
done
find $1 -type f $cmd;
}
代碼_by本身_將不會執行任何操作。這是一個函數聲明。除非被調用,否則它不應該做任何事情。 – devnull
您是否在提示符處使用單引號?他們正在阻止參數擴大; 'egrep'正在獲取文字「$ 2」等字樣。 – chepner
是的是一個功能。但是找到的行,用參數在終端中用引號替換。 – trad