В качестве пейджера я использую следующую оболочку. Это не так красиво, как другая оболочка, показанная здесь (, потому что она всегда использует 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
Я знаю об одной попытке разработать более доступный 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
тоже):фд .