Для фрагмента:
FILE=${1-data1}
# Utility functions: print-as-echo, print-line-with-visual-space.
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
pl " Results:"
cgrep -d "/////" -w "DEBUG" +w "END" "AAA" $FILE
это производится:
Results:
/////
DEBUG|2018-03-27,14:41:43.089|output:
=============================================
[START]
00 USER_ID = {"AAA"} <= searching key
01 USER_NAME = {"N"}
02 USER_TEL = {"001-1234-1234"}
:
05 USER_LOCATION = {"earth"}
[END]
/////
DEBUG|2018-03-27,14:41:43.089|output:
=============================================
[START]
00 USER_ID = {"AAA"} <= searching key
01 USER_NAME = {"N"}
02 USER_ADDR = {"bla~ bla~~"}
:
010 JOB = {"designer"}
[END]
Код cgrep позволяет указать окно вокруг искомого текста(AAA ). Таким образом, в этом случае мы идем назад к DEBUG и вперед к END .
Мы использовали код ATT cgrep в течение многих лет. Его необходимо скомпилировать, но мы никогда не сталкивались с ошибками в этом процессе.
Вот некоторые подробности о cgrep:
cgrep shows context of matching patterns found in files (man)
Path : ~/executable/cgrep
Version : 8.15
Type : ELF 64-bit LSB executable, x86-64, version 1 (SYS...)
Home : http://sourceforge.net/projects/cgrep/ (doc)
С наилучшими пожеланиями... ура, дрл
Стандартная утилита printf
не поддерживает управляющие последовательности \uxxxx
, см.:https://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html
Предположение, что это может работать, зависит от расширений, которые могут присутствовать в нескольких реализациях (, например. во встроенном )ksh
, но нельзя ожидать, что он будет поддерживаться в целом. См. стандартный документ printf
.
Другая проблема, по-видимому, заключается в вашем предположении, что вызов
printf '\u%s\n' 123
приведет к тому же результату, что и вызов:
printf '\u123\n'
Это не работает, так как printf
анализирует строку формата поэлементно и не видит ожидаемой строки формата.
Таким образом, даже если вы используете bash
для выполнения скрипта, вы можете ожидать, что escape-последовательность обратной косой черты \uxx
будет расширена, если за ней следуют две шестнадцатеричных цифры, а escape-последовательность появляется буквально в строке формата. Если вы хотите расширить 4 шестнадцатеричных цифры, вам нужно буквально указать \Uxxxx
в строке формата.