Я столкнулся с той же проблемой и попробовал разные способы, предложенные вhttps://bugs.launchpad.net/linuxmint/+bug/1652489
В любом случае, решение для меня состояло в том, чтобы установить пакет Xscreensaver . Его описание гласит: «установите этот пакет, если вы предпочитаете xscreensaver gnome -screensaver »:-)
Теперь я могу заблокировать экран и вернуться обратно без проблем.
Если я вас правильно понял, это мое предложение:
for i in record*.txt; do
xyz=$(grep -oP "(?<=RESULT ).*(?=\*\*\*)" $i)
sed -i "1 iX Y Z\n$xyz\n" summary${i//record/}
done
Перебрать файлы с именамиrecord*.txt
for i in record*.txt; do
Захват строки между RESULT
и***
xyz=$(grep -oP "(?<=RESULT ).*(?=\*\*\*)" $i)
Добавить X Y Z в первую строку после захваченного шаблона в файлеsummary*.txt
sed -i "1 iX Y Z\n$xyz\n" summary${i//record/}
Это простое объединение строки с фиксированным текстом(X Y Z
)и части одной строки из одного файла(SummaryX.txt
)и всего содержимого другого файла с родственным именем файла(recordX.txt
)
#!/bin/sh
for sfile in Summary*.txt; do
rfile="$(echo "$sfile" | sed -e 's/^Summary/record/')"
ofile="$rfile.new"
{
echo X Y Z
sed -E -n -e 's/^.*RESULT ([0-9.]+ [0-9.]+ [0-9.]+).*/\1/p' "$sfile"
echo
cat "$rfile"
} > "$ofile"
# uncomment the following to replace the original record file with the new one.
# mv -f "$ofile" "$rfile"
done
Вы не указали, какую оболочку вы используете, поэтому здесь не используются какие-либо специфические для bash -манипуляции со строками или другие возможности. Он должен работать с любой оболочкой, совместимой с sh -.
Вывод будет сохранен в recordX.txt.new
, если вы не раскомментируете строку mv
. Это делается для того, чтобы вы могли убедиться, что он делает то, что вы хотите, до того, как он уничтожит ваши исходные входные файлы, (вы все равно должны работать с резервными копиями, когда делаете что-то потенциально разрушительное ).
$ cat record1.txt.new
X Y Z
111.114 30.344 90.3454
11111 absda qwedc
11112 uiyds dqeds
11113 eqwev jfsec...