سؤال

يحتوي file.txt على:

##w##

##wew##

باستخدام Mac 10.6، Shell Bash، الأمر:

cat file.txt | grep [[:alpha:]]* -o

نواتج لا شيء. أحاول استخراج النص داخل علامات التجزئة. ما الخطأ الذي افعله؟

هل كانت مفيدة؟

المحلول

(لاحظ أنه من الأفضل ممارسة في هذه الحالة لتمرير اسم الملف كوسيطة ل GREP بدلا من الأنابيب إخراج القط إلى GREP: grep PATTERN file بدلا من cat file | grep PATTERN.)

ما قذيفة تستخدمها لتنفيذ هذا الأمر؟ أظن أن مشكلتك هي أن Shell تفسر علامة النجمة كحاولة البدل ومحاولة ملفات الأرض.

حاول نقلا عن النمط الخاص بك، على سبيل المثال grep '[[:alpha:]]*' -o file.txt.

لقد لاحظت أن هذا يعمل بشكل جيد مع إصدار GREP الذي يحتوي على جهاز Linux الخاص بي، ولكن GREP على My Mac يتطلب الأمر grep -E '[[:alpha:]]+' -o file.txt.

نصائح أخرى

sed 's/#//g' file.txt

/SCRIPTS [31]> cat file.txt
##w##
##wew##

/SCRIPTS [32]>  sed 's/#//g' file.txt
w
wew

إذا كان لديك باش> 3.1

while read -r line
do
  case "$line" in
   *"#"* )
        if [[ $line =~ "^#+(.*)##+$" ]];then
            echo ${BASH_REMATCH[1]}
        fi
  esac    
done <"file"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top