sed
отлично подходит для простых манипуляций с текстом - как правило, однострочные редакторы, хотя и могут работать с многострочными (с большими усилиями). В целом sed
в значительной степени сдерживается отсутствием переменных и арифметических вычислений, но, тем не менее, во многих случаях предлагает простейшее решение.
awk
очень эффективен как для простых, так и для сложных манипуляций с текстом и нумерологических вычислений, но не идеально подходит для вещей, выходящих за рамки этого.
Для первого примера:
sed -E 's/^([^ ]+) = undefined$/\1 = error "\1"/' file1
awk '$3=="undefined"{ $3="error \"" $1 "\"" } {print $0}' file1
Для второго примера, основанного на =значениях являющихся либо альфа-альфа-альфа-альфа-альфа-альфа-альфа-альфа-альфа-альфа-альфа-альфа-альфа-альфа-альфа-альфа-альфа-альфа-альфа-альфа-альфа. Он также группирует любые немагические строки (чтобы удалить, просто удалите из[0]
утверждений):
awk -F'=' 'BEGIN{ # split regular expressions, using `x7F` as delimiter (or any char not in the regex)
n=split("^[A-Z]+$" "\x7F" "^[0-9]+$",rx,"\x7F")
}
{ for( i=1;i<=n;i++ ){
if( $2 ~ rx[i] ){
out[i]=out[i] sprintf( (out[i] ?", " :"") "%s", $2)
break
} }
if( i>n ) out[0]=out[0] $0 RS # non-matching lines
}
END{ printf out[0]
for( i=1;i<=n;i++ ){ print "Magic(" out[i] ")" }
}' file2
Я копировал содержимое папки
/etc/NetworkManager/system-connections/
на другой компьютер, но это не сработало :как только я попытался заставить NetworkManager подобрать соединение из скопированной настройки, NetworkManager запросил пароль и создал второй файл с тем же именем файла и добавлен uuid.
Так и было:
myConnection
myConnection-78d2dab8-8413-4955-a6f3-7c4530b44e52
NetworkManager требователен к разрешениям. Файлы конфигурации должны иметь права доступа 600 (-rw -------).