Вы можете настроить стиль курсора в соответствии с режимом, установив его в.inputrc
:
set editing-mode vi
set show-mode-in-prompt on
set vi-ins-mode-string \1\e[6 q\2
set vi-cmd-mode-string \1\e[2 q\2
# optionally:
# switch to block cursor before executing a command
set keymap vi-insert
RETURN: "\e\n"
Это даст вам лучевой курсор в режиме вставки или блочный курсор в обычном режиме.
Подробнее см.https://stackoverflow.com/a/42107711/52817
echo "one one tow tow three three tow one three" | tr " " "\n" | uniq | tr "\n" " "
Также можно использовать sed (GNU для +
и\<
)и использовать синтаксис -E
, чтобы упростить регулярное выражение.
Это регулярное выражение удаляет одно повторяющееся слово (из двух принятых):
$ string='one one tow tow three three tow one three'
$ echo "$string" |
sed -E 's/(\<([^ ]+)[ ]+)\2/\1/g'
one tow three tow one three
Но мы можем расширить эту идею и удалить любое количество повторений
$ string='one one tow tow tow tow three three tow one one onebook one three three'
$ echo "$string" |
sed -E 's/(\<([^ ]+)[ ]+)(\2([ ]+|$))+/\1/g'
one tow three tow none one onebook three
Или немного более сложное регулярное выражение BRE (, которое принимает пробел и табуляцию):
$ echo "$string" |
sed 's/\(\<\([^[:blank:]]\{1,\}\)[[:blank:]]\{1,\}\)\(\2\([[:blank:]]\{1,\}\|$\)\)\{1,\}/\1/g'
one tow three tow none one onebook three
Примечание. :Поскольку sed является линейно-ориентированным инструментом, он будет работать только с одной строкой за раз.