замена шаблона с помощью sed [closed]

Давайте разберемся с различными настройками звука.

Ваше звуковое оборудование управляется драйверами ядра ALSA, библиотека ALSA предоставляет доступ к этим драйверам, и существуют различные элементы управления громкостью/отключением звука, которые можно изменить с помощью alsamixer или amixer. . Некоторые из этих настроек также могут быть доступны через Gnome. Я обычно оставляю их в покое и изменяю только если что-то не работает.

Вы можете сохранить и восстановить эти настройки с помощью alsactl store и alsactl restore, а пакеты Debian alsa-utils содержат скрипт, который восстанавливает их из /var/lib/alsa/asound.state.

Pulseaudio работает поверх ALSA. Вы можете изменить настройки Pulseaudio в pavucontrol и другими способами. Pulseaudio запоминает некоторые из своих настроек, но нет общего способа их сохранения или восстановления; если вы хотите, чтобы настройки Pulseaudio отображались при загрузке, вам нужно повозиться с настройкой Pulseaudio.

Поскольку я не запускаю рабочий стол Gnome, я не знаю, что на самом деле делает «отключить звуковые оповещения». Это могут быть настройки Gnome, и в этом случае вам нужно выяснить, как восстановить настройки Gnome при загрузке. В базе данных настроек Gnome есть различные утилиты, такие как dconf и gsettings, но использование, по-видимому, менялось в разных версиях, и я никогда не мог полностью понять, как все работает.

Итак, если вас в основном интересует «отключение звуковых оповещений», вам нужно разобраться, что именно он делает и что изменяет.

Редактировать:

Таким образом, настройки Звуковых эффектов определенно относятся к Gnome, поэтому вам нужно выяснить, как сделать настройки Gnome постоянными или установить их при загрузке.

alsa-utils восстанавливает настройки при загрузке, предоставляя сценарии для SysV Init (/etc/init.d/alsa-utils) и systemd (/lib/systemd/system/ alsa-*), которые в основном вызывают alsactl restore /var/lib/alsa/asound.stat). Поэтому, когда вы вызываете alsactl store от имени root, он запишет текущие настройки в этот файл, и они будут восстановлены при загрузке.

Возможно, что «выбранный» вывод, показанный в меню Gnome, является оболочкой для приемника Pulseaudio по умолчанию. Вы можете установить этот приемник с помощью pacmd set-default-sink (используйте pacmd list-sist-sinks | grep name:, чтобы получить список имен приемников), и я думаю, что в pavucontrol тоже. Pulseaudio запомнит это. Также возможно, что это снова настройка Gnome, которая переопределяет то, что делает Pulseaudio.

0
25.01.2017, 23:13
4 ответа

С perl

$ perl -pe 'BEGIN{$n=1} s/as/$n++/e' file
a b c 1 aa as
2 b d f aa sa
df 3 kf as df
1
28.01.2020, 02:14

Если вы действительно хотите использовать sed, это можно сделать в течение цикла while:

count=1;
while read line
    do sed 's/as/'"$count"'/1' <<< "$line";
    count=$((count+1));
done < source_file >> target_file

Заключительный '' пара "$ count" необходима оболочке для правильного раскрытия переменной для использования внутри команды sed.

Еще короче (спасибо Кусалананде) :

while read line
    do sed 's/as/'"$(( ++count ))"'/1' <<< "$line";
done < source_file > target_file

Если вы хотите увеличить только при обнаружении шаблона:

count=1;
while read line;
    do sed '/as/! {q100}; s/as/'"$count"'/1' <<< "$line";
    [[ "$?" -eq 0 ]] && (( ++count ));
done < source_file > target_file
3
28.01.2020, 02:14

Вот небольшой скрипт на Python, который может делать то, что вы просите.

#!/usr/bin/env python
import sys
counter = 0
with open(sys.argv[1]) as fd:
    for line in fd:
        new_words = []
        words = line.strip().split()
        found = False
        for word in words:
            val = word
            if word == 'as' and not found:
                counter += 1
                found = True
                val = str(counter)
            new_words.append(val)

        print(" ".join(new_words))

И тестовый прогон:

$ ./substitute_dynamic_val.py input.txt                                                                                  
a b c 1 aa as
2 b d f aa sa
df 3 kf as df
0
28.01.2020, 02:14

Поскольку шаблон замены меняется каждый раз, это может быть больше похоже на awk:

awk 'BEGIN { needle=1 } /as/ { $0=gensub( /as/, needle, 1, $0 ); needle=needle+1} { print } ' /path/to/input

Вышеупомянутое работает с GNU Awk 4.1.3 , API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)

3
28.01.2020, 02:14

Теги

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