Есть ли попытки разработать более доступный sed?

В качестве пейджера я использую следующую оболочку. Это не так красиво, как другая оболочка, показанная здесь (, потому что она всегда использует less -Sдля усечения длинных строк ), но она чертовски проста. Кажется, работает очень хорошо с iTerm2.

#!/bin/bash
set -e

text=$(</dev/stdin)
text_lines=$(echo "${text}" | wc -l)
term_lines=$(tput lines)

if [[ $text_lines -lt $term_lines ]]; then
    echo "${text}"
else
    echo "${text}" | less -S -R
fi
-4
19.09.2021, 02:18
1 ответ

Я знаю об одной попытке разработать более доступный sed. Однако это не совсем то, что вы хотите.

сд

Интуитивный поиск и замена CLI(sedальтернативы )в rust.

Он имеет ограниченные функциональные возможности (по сравнению сsed)и, безусловно, имеет недостатки, связанные с его простотой. Вам лучше узнать больше о sedи других утилитах, если вам нужны сверхспособности. Я тестировал sdпод Fedora 34 (работает сdnf install sd)и Ubuntu 21.04 (с Ubuntu Я установил груз и зависимость:build-essential).


Заменить новые строки запятыми:

sd: sd '\n' ',' input.txt
sed: sed -i ':a;N;$!ba;s/\n/,/g' input.txt
Синтаксис

sdв этом случае такой же, как у tr.

tr '\n' ',' < input.txt

Модификация файлов на месте:

sd: sd before after file.txt
sd: sd 'before this' 'after that' file.txt
sed -i 's/before/after/g' file.txt

Извлечение данных из строк, содержащих косые черты:

# Strings between () are groups.

echo "sample with /path/" | sd '.*(/.*/)' '$1'
/path/

echo "sample with /path/" | sd '(.*)/.*/' '$1'
sample with

# Capture two groups and invert.
echo "sample with /path/" | sd '(.*)(/.*/)' '$2$1'
/path/sample with

echo 'lots((([]))) of special chars' | sd -s '((([])))' ''
lots of special chars
    -s, --string-mode
            Treat expressions as non-regex strings
        

Многострочная замена:

sd 'test\nmultiline' 'this\ntest'  input.txt

Другой вариант:

-p, --preview
  Output result into stdout and do not modify files

Существует также попытка более простого find(, разработанного в rustтоже):фд .

1
19.09.2021, 16:24

Теги

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