Ваша ОС содержит множество небольших и простых инструментов для обработки текста. В этом случае я бы использовалcut
:
cut -d; -f1 <FILE >tmpfile && mv tmpfile FILE
[OK]
Соответствует любому символу в скобках, скобки не говорят о том, что он нечувствителен к регистру.
Вы могли бы сделать:
[[ "$status" =~ ^[Oo][Kk]$ ]]
или я бы сделал следующее:
[[ "${status,,}" == ok ]]
Оператор ,,
для расширения параметра преобразует всю переменную в нижний регистр для целей сравнения.
Вы можете выполнить сопоставление с образцом следующим образом:
[[ $status == @(ok|OK|okay) ]] && echo "is the same"
Или, аналогично идее jesse _b в предыдущем посте, оператор ^^
для расширения параметра преобразует всю переменную в верхний -регистр для целей сравнения:
[[ "${status^^}" == OK ]] && echo "is the same"
[[ $status =~ OK ]]
(или[[ $status =~ "OK" ]]
)соответствует, если$status
содержит OK
, и [[ $status =~ [OK] ]]
соответствует, если содержит символ в этом наборе OK
, поэтому либо O
, либо K
.
С регулярными выражениями вам нужно использовать ^
или $
до привязки шаблона соответственно в начале и в конце темы, если вы хотите сопоставить тему в целом, а не внутри Это.
Чтобы выполнить поиск без учета регистра в bash
, вы можете использовать параметр nocasematch
:
Это относится к сопоставлению шаблонов оболочки с помощью Korn -стиля [[ $var = pattern ]]
или стандарта case $var in (pattern)
и к сопоставлению регулярных выражений с [[ $var =~ regexp ]]
.
Итак, здесь можно сделать:
shopt -s nocasematch
[[ $status = ok ]] && echo yes
[[ $status =~ ^ok$ ]] && echo yes
case $status in
(ok) echo yes
esac
(вы, вероятно, захотите сбросить nocasematch
впоследствии или сбросить его до предыдущего значения (см. typeset restore="$(shopt -p nocasematch)"
для сохранения и eval "$restore"
для восстановления ), так как оставление его включенным повлияет на все операции сопоставления шаблонов ).
Или вы можете использовать:
[[ $status = [oO][kK] ]] && echo yes
[[ $status =~ ^[oO][kK]$ ]] && echo yes
case $status in
([oO][kK]) echo yes
esac
case $status in
(ok | OK | Ok | oK) echo yes
esac
Варианты на основе case
являются стандартным синтаксисом POSIX sh
.
В оболочке zsh
вместо глобального nocasematch
параметра глобального (и искажения всех операторов сопоставления с образцом )можно использовать расширенные операторы подстановки или операторы регулярных выражений PCRE, которые выборочно включают регистр -нечувствительное сопоставление для одного шаблона или части одного шаблона.
Например,
set -o extendedglob
[[ $status = (#i)ok ]]
или:
zmodload zsh/pcre
[[ $status -pcre-match '^(?i)ok$' ]]
Или для эквивалента bash
's ${var,,}
используйте $var:l
а-ля csh или${(L)var}
:[ "$status:l" = ok ]
В zsh
,вам следует избегать использования переменной с именем $status
, так как это переменная, которая содержит статус выхода предыдущей команды в качестве псевдонима стиля Bourne -$?
, как в большинстве оболочек Bourne, отличных от -(. ] csh, tcsh, rc, es, fish не менее ).
В варианте ksh93 оболочки Korn (, чей [[...]]
и bash, и zsh скопировали ), вы должны сделать [[ $status = ~(i)ok ]]
.