Как предотвратить отсутствие записей в .bash_history? (Возможно, из-за нехватки места на диске)

Команда

sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;' file

печатает абзацы, содержащие строку AAA.

Это вызывает sedсо следующим сценарием sed:

/./{
    H
    $!d
}
x
/AAA/!d

Аннотированная версия:

/./{        # When hitting a line that contains at least one character...
    H;      # Append the line to the "hold space".
    $!d;    # If it's not the last line, delete it.
}
x;          # Swap the hold space and the pattern space.
/AAA/!d;    # Delete the pattern space if it does not contain the string "AAA"
            # (implicit print)

Итак, вкратце, он собирает строку за строкой в ​​«удерживаемом пространстве» (буфере общего назначения в sed), и когда находит пустую строку (шаблон /./не соответствует ), он определяет, содержит ли сохраненная коллекция строк строку AAA, и печатает ее, если она есть.

Это также описано в ответе здесь:GREP/SED или AWK :Печатать весь абзац в файле при совпадении с образцом

Учитывая файл

this is
a paragraph

this is
another one

this paragraph
contains the string
AAA

Последний абзац (будет выводиться с начальной пустой строкой ).

Чтобы избавиться от пустой строки, которая будет предшествовать каждому выводимому абзацу (, если это то, что вам нужно ), используйте

/./{
    H
    $!d
}
x
/AAA/!d
s/\n//

Или в командной строке

sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;s/\n//'

1
25.04.2020, 12:15
1 ответ

История команд вашей текущей оболочки записывается в историю.bash _, когда вы закрываете оболочку. Поэтому, хотя обычно все последние команды доступны из оболочки, они еще не добавлены в файл истории.bash _.

1
19.03.2021, 02:25

Теги

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