Замена строк с помощью итератора

Я использую Mint 18.1 на Macbook Air 6,2. Вот решение, которое у меня есть, и оно работает почти идеально.

Я использую mba6x_bl для исправления моего черного экрана MBA при пробуждении. Следуйте их инструкциям.

Затем используйте решение Bob-El выше, чтобы решить проблему приостановки.

резервное копирование и открытие / etc / acpi / events / powerbtn sudo cp / etc / acpi / events / powerbtn / etc / acpi / events / powerbtn_bak sudo nano / etc / acpi / events / powerbtn заменить содержимое powerbtn текстом ниже
# /etc/acpi/events/lidbtn
# This is called when the user closes the lid and calls  
# /etc/acpi/lidbtn.sh for further processing.  
# Optionally you can specify the placeholder %e. It will pass  
# through the whole kernel event message to the program you've  
# specified.  
# We need to react on "button lid.*" and "button/lid.*" because  
# of kernel changes.  
event=button[ /]lid  
action=/etc/acpi/lidbtn.sh
create /etc/acpi/lidbtn.sh
sudo nano /etc/acpi/lidbtn.sh
поместить в него следующий текст
#!/bin/bash
if grep -q closed /proc/acpi/button/lid/*/state
  then
  /usr/sbin/pm-suspend
fi
Open Power Management -> Включение питания переменного тока -> Действия -> Когда крышка ноутбука закрыта, выберите «Пустой экран». Это приведет к приостановке MBA при подключении к сети.

Единственная проблема, которую я заметил, - это когда MBA приостановлен с подключенной мощностью, его клавиатура автоматически включается. Но кроме этого все работает хорошо.

1
задан 7 April 2016 в 15:18

2 ответа

Еще один способ awk, рассматривающий [H как разделитель записи:

awk -v RS='\\[H' 'NR>1{printf "</pre></div><div id=cat%d><pre>",NR-1}1'

Перед записью перед первой записью будет [H, поэтому для этих записей я печатаю </pre></div><div id=catN><pre>, где N = NR - 1 (NR - номер записи) перед самой записью.

$ awk -v RS='\\[H' 'NR>1{printf "</pre></div><div id=cat%d><pre>",NR-1}1' foo.txt

</pre></div><div id=cat1><pre>
A

</pre></div><div id=cat2><pre>
B

</pre></div><div id=cat3><pre>
C

WIth GNU awk, вы можете использовать новый модуль модификации inplace:

gawk -i inplace  -v RS='\\[H' 'NR>1{printf "</pre></div><div id=cat%d><pre>",NR-1}1' foo.txt

Это похоже на sed -i.

4
ответ дан 23 May 2018 в 12:20

AWK версия. Обратите внимание на то, как [ экранируется и как организованы кавычки, чтобы разрешить расширение переменной counter в "</pre></div><div id=cat"counter"><pre>":

$ awk '{ if ( $0~/\[H/ ){\                                                     
>    counter++; sub(/\[H/,"</pre></div><div id=cat"counter"><pre>")\           
> }; print }' test_input.txt                                                   
</pre></div><div id=cat1><pre>
A
</pre></div><div id=cat2><pre>
B
</pre></div><div id=cat3><pre>
C
</pre></div><div id=cat4><pre>

Если вы не используете gawk, используйте gawk '...' input_file.txt > /tmp/tmp.txt && mv /tmp/tmp.txt input_file.txt подход для замены исходный файл с отредактированной версией

Дополнение

Как предположил muru, код можно упростить до

awk '/\[H/{counter++; sub(/\[H/,"</pre></div><div id=cat"counter"><pre>")}1' test_input.txt
2
ответ дан 23 May 2018 в 12:20
  • 1
    { if ($0 ~/\[H/{...} } несколько подробный. Я думаю, ваше выражение сводится к: awk '/\[H/{counter++, sub(...)}1'. – muru 6 April 2016 в 22:15
  • 2
    @muru Я получаю двойные строки, если я пишу его как awk '/\[H/;1' test_input.txt – Sergiy Kolodyazhnyy 6 April 2016 в 22:17
  • 3
    Конечно ты будешь. Обратите внимание, что в моем комментарии я исключил только функцию sub. [F2] был опущен. Если вы хотите, чтобы я был подробным: awk '/\[H/{counter++, sub(/\[H/,"</pre></div><div id=cat"counter"><pre>")}1' – muru 6 April 2016 в 22:17
  • 4
    Я мог бы использовать форму awk '/\[H/ {print $0};!/\[H/' test_input.txt , хотя – Sergiy Kolodyazhnyy 6 April 2016 в 22:17

Другие вопросы по тегам:

Похожие вопросы: