Мне нужно указать количество цифр в шаблоне регулярных выражений для awk
У меня есть файл:
#test 34
# test 34
#test34
# test 3a4
#blahtest 34
#test yes
Мне нужно возвращать результаты со значением поля, например, числом ( 34) или слово ( да ).
3a4 это неверное значение,
blahtest и test34 это неверное имя поля
Еще один пример - / etc / ssh / sshd_config .Я хотел бы найти в этом файле строку с параметром и его значением.Я не знаю это значение, пока не нашел строку с этим параметром.Тогда мне нужно изменить это значение на другое.Пример #Port 22 -> #Port <my_value>
Моя логика См. Код ниже. функция get_fielad_value () имеет два аргумента: $ 1 - имя поля $ 2 - путь к файлу, в котором нужно найти.Эта функция возвращает значение поля.Я использовал awk, чтобы найти линию, соответствующую шаблону.Так что, если есть строка с неправильным значением поля?Мне нужно исправить мой шаблон.awk должен выполнять поиск не только по имени поля, но и по значениям поля.Это могут быть цифры или слова.В свете вышесказанного я должен использовать:
awk '/^# *'"$some_str"' +([[:digit:]]{1,5}|[[:alpha:]]*) {print;exit;}'
[[:digit:]]{1,5}|[[:alpha:]]*
означает, что строка для поиска может содержать пятизначные (или менее) цифры ИЛИ буквы. Это мой сценарий bash.Надеюсь, это прояснит мой вопрос.
#!/bin/bash
#comment string
comment() {
#if str1=$(awk '/^'"$1"'')
sed -i "/^$1/ c# $1" $2
}
#uncomment string
uncomment() {
if str1=$(awk '/^# *'"$1"' +/ {gsub(/^#|^# +/,""); print; exit;}' $2)
then
sed -i "s/^#\+ *$str1/$str1/" $2
fi
}
#get field value
get_field_value() {
FIELD_VALUE=$(awk '/^# *'"$1"' +/ {gsub(/^#|^# +/,""); print $2;exit;}' $2)
}
#set field
set_field_value(){
get_field_value $1 $2
}
#replace field
replace_field(){
sed "s/$1/$2/g"
}
set_field_value test test 777
uncomment test test