Чтобы добавить к G -Ответ человека:да, вы можете добиться точно такого же результата, используя только sh (, так как это было спецификацией в вашем дублирующем вопросе там , на который я ответил 9 часов до G -Человек ответит здесь ).
Существует встроенная функция set
, которая позволяет вам назначать значения для$1
$2
и $3
и так далее. Вот цитата из справочной страницы bash (, это также относится к sh):
установить [{ -опции | +опции | --}] аргумент...
The third use of the set command is to set the values of the shell's positional parameters to the specified args. To change the positional parameters without changing any options, use “--” as the first argument to set. If no args are present, the set command will clear all the positional parameters (equivalent to executing “shift $#”.)
Так что можно:
set -f
while read ln; do
set -- $ln
printf '%s\n' "$ln" >> "index i"$2
done < input
set +f
В set -- $ln
, $ln
разбивается на поля, и n-е поле назначается n-му позиционному параметру.
Цитата вокруг $ln
в следующей строке обеспечивает целостность содержимого (с сохранением пробелов и т. д. ).
set -f
и set +f
предназначены для предотвращения подстановки символов, таких как *и ? в файле с путаницей set
. Спасибо Скотту за то, что поднял эту тему.
Вместо printf
я изначально использовал echo
. Но благодаря второму комментарию Скотта (, если противник меняет строку на echo
с такими опциями, как -n
, -e
и т. д.,тогда echo
запутается ), printf
вместо этого используется для защиты от этого.
Это показывает, что sh, вероятно, не идеальный выбор для такого рода работы. По крайней мере, используйте bash с поддержкой регулярных выражений. Но, это выполнимо, если вы попробуете.
Что касается awk, то он не "немного быстрее", а быстрее на порядок, если не учитывать дисковый ввод-вывод. Поэтому предпочтительнее использовать awk.
Кстати, я уверен, что вы не слышали о поговорке «если два ответа — это слишком много, то два вопроса — это два слишком много».
since I just said it ;)
Но в следующий раз сделайте выбор и придерживайтесь его, чтобы мы все могли сосредоточить свои усилия на нем.
Сначала установите раскладку клавиатуры, , затем исходный сценарий оболочки Fzf. В противном случае сценарий оболочки Fzf установит все сочетания клавиш в раскладку по умолчанию emacs
(, после чего вы переключитесь наvi
).