/media/bill/SWAPPER/Qnial/MY_NDFS/strings - examples.txt string routines www.BillHowell.ca 19Jan2018, initial ********************* 20Jan2018 sed & grep operators, using Unix grep My QNial implementations of [sed, grep] are very limited. However, very long, complex problems might be better served by separate bash scripts. +-----+ grep qnial> grep 'ow' 'Who knows what whose nose knows?' Who knows what whose nose knows? qnial> 'ow' EACHRIGHT grep ('May I live forever in a box.' 'Who knows what whose nose knows?' 'Buy a big hamburger.') ++--------------------------------++ ||Who knows what whose nose knows?|| ++--------------------------------++ qnial> grep 'd_QNial_' '/media/bill/SWAPPER/Qnial/setup.ndf' >> long output, but works 20Jan2018 +-----+ sed qnial> sed ' ''s/all/seldom/'' ' ' "We are all crazy." ' We are seldom crazy. qnial> ' ''s/for/zzz/'' ' EACHRIGHT sed ('May I livefor forever in a forebox.' 'Who knows for what whosefor nosfore knows?' 'for Buy a bigfor hamburger.') +-----------------------------------+------------------------------------------+---------------------------+ |May I livezzz forever in a forebox.|Who knows zzz what whosefor nosfore knows?|zzz Buy a bigfor hamburger.| +-----------------------------------+------------------------------------------+---------------------------+ >> OK - notice that only the FIRST occurence is replaced qnial> ' ''s/for/zzz/g'' ' EACHRIGHT sed ('May I livefor forever in a forebox.' 'Who knows for what whosefor nosfore knows?' 'for Buy a bigfor hamburger.') +-----------------------------------+------------------------------------------+---------------------------+ |May I livezzz zzzever in a zzzebox.|Who knows zzz what whosezzz noszzze knows?|zzz Buy a bigzzz hamburger.| +-----------------------------------+------------------------------------------+---------------------------+ >> Now all occurences of "for" are replaced. Incomplete : from "/media/bill/SWAPPER/bin/email - process folders.sh" see also "/media/bill/SWAPPER/bin/email - process folders notes.txt" # Create script to grep addresses from email folders ls -1 "$d_folder" | grep --invert-match ".msf" | grep --invert-match ".txt" | tr \\n \\0 | xargs -0 --max-args=1 -I email_folder echo >>"$p_script" 'grep -o "\([-A-Za-z0-9._]\+\)\(@\)\([-A-Za-z0-9._]\+\)" "'"$d_folder"'email_folder" >>"'"$d_folder"'email_folder.txt" ' >> OK #************************* # 04May2018 - long time to fix this!! in_string IS OP subStr str { LOCAL flag_in len_subStr len_str i_str i_subStr ; flag_in := o ; len_subStr := gage shape subStr ; len_str := gage shape str ; i_str := 0 ; i_subStr := 0 ; % ; IF flag_break THEN BREAK ; ENDIF ; WHILE (i_str < len_str) DO WHILE (AND ((i_subStr + i_str) < len_str) (i_subStr < len_subStr) (= subStr@i_subStr str@(i_str + i_subStr)) ) DO i_subStr := i_subStr + 1 ; ENDWHILE ; IF (= i_subStr len_subStr) THEN flag_in := l ; EXIT 'done' ; ELSE flag_in := o ENDIF ; i_str := i_str + 1 ; i_subStr := 0 ; ENDWHILE ; flag_in } # tests # in_string 'ello' 'hello my big dinosaur and all his friends' # in_string 'osaur' 'hello my big dinosaur and all his friends' # in_string 'saur a' 'hello my big dinosaur and all his friends' # in_string 'a ze' 'hello my big dinosaur and all his friends' # copy past parts for BREAK tracing # len_str len_subStr i_str i_subStr subStr@i_subStr str@(i_str + i_subStr) # # 22Apr2018 tests # in_string 'lo' 'hello' l # in_string '2*(r·b)*r' ' e^2*(r·b)*r(rb)/|r2 - r1|^2*6*Bpe^2*Bep^2*(-3/2/π) ' ?op_parameter >> does directoty listing!? # in_string '2*(r·b)*r' 'e^2*(r·b)*r(rb)/|r2 - r1|^2*6*Bpe^2*Bep^2*(-3/2/π) ' >> same problem # 04May2018 check on usage of string_in : # $ grep -ri 'string_in' '/media/bill/PROJECTS/Qnial/' /media/bill/PROJECTS/Qnial/MY_NDFS/strings.ndf:string_in_strList IS OP Substr Str_list /media/bill/PROJECTS/Qnial/MY_NDFS/strings.ndf: f_name := link d_Qnial_temp 'string_in_strList.txt' ; /media/bill/PROJECTS/Qnial/MY_NDFS/strings.ndf:# string_in IS OP Substr Str - simple indication of whether a Substr is in str, without giving position /media/bill/PROJECTS/Qnial/MY_NDFS/strings.ndf:# 22Apr2018 string_in_ASCII acts wild when strings with unicode [2,3] byte characters are present!! /media/bill/PROJECTS/Qnial/MY_NDFS/strings.ndf:# $ find '/media/bill/PROJECTS/Qnial/MY_NDFS/' -name '*.ndf' | cat | grep 'string_in' /media/bill/PROJECTS/Qnial/MY_NDFS/strings.ndf:# string_in_file IS OP Substr p_name p_hostCmdRslt - boolean indicator that Substr is in file p_name /media/bill/PROJECTS/Qnial/MY_NDFS/strings.ndf:string_in_file IS OP Substr p_name p_hostCmdRslt /media/bill/PROJECTS/Qnial/MY_NDFS/strings.ndf:stst IS string_in_file 'string_' '/media/bill/HOWELL_BASE/Qnial/MY_NDFS/strings.ndf' '/media/ramdisk/QNial host response.txt' '/media/ramdisk/QNial host error.txt' /media/bill/PROJECTS/Qnial/MY_NDFS/strings.ndf:filelength '/media/ramdisk/QNial string_in.txt' /media/bill/PROJECTS/Qnial/MY_NDFS/strings.ndf:filelength '/media/ramdisk/QNial string_in999.txt' /media/bill/PROJECTS/Qnial/MY_NDFS/strings.ndf:# sed IS OP sed_expr string_in - sed process string with given sed_expression /media/bill/PROJECTS/Qnial/MY_NDFS/strings.ndf:sed IS OP sed_expr string_in /media/bill/PROJECTS/Qnial/MY_NDFS/strings.ndf: textnew := sed_prep_string string_in ; #************************ # string_in_file IS OP Substr p_name p_hostCmdRslt - boolean indicator that Substr is in file p_name # just uses Unix grep in host mode!! # Jan2018? test stst IS string_in_file 'string_' '/media/bill/HOWELL_BASE/Qnial/MY_NDFS/strings.ndf' '/media/ramdisk/QNial host response.txt' '/media/ramdisk/QNial host error.txt' # filelength '/media/ramdisk/QNial string_in.txt' filelength '/media/ramdisk/QNial string_in999.txt' # enddoc