Второй ~
не расширяется; попробуй
locate -d "${HOME}/.a_locate.db:${HOME}/.b_locate.db:" -Ai file_to_find
вместо этого или, поскольку это zsh, просто
locate -d $HOME/.a_locate.db:$HOME/.b_locate.db: -Ai file_to_find
Причина в том, что ~/
раскрывается только в начале слова-оболочки. Слово-оболочка заканчивается только пробелом (, поскольку здесь это имеет значение — настоящие правила намного сложнее ). ~/foo:~/bar
— это одно слово, которое начинается с ~/
, поэтому начальное ~
расширяется до вашего домашнего каталога, но среднее ~
не представляет собой ничего особенного, поэтому оно остается тильдой. Существует исключение в правой части -присваивания :в PATH=~/foo:~/bar
, ~/
раскрывается после знака присваивания =
и после :
в правой части -.
Вы можете попробовать это с GNU sed
, предполагая, что строка уникальна, если нет, прокомментируйте ее:
sed -E 's/:(\w+) (\w+) (\w+) (\w+):/:\4 \2 \3 \1:/' file
Выход:
muhaz:x:6541:113:Mulleria Mohammed Kunhi AhmmedMuhaz:/home/students/muhaz:/bin/bash
Используя GNU sed, мы можем сделать это как:
$ sed -r '
s/:/\n/4;s//\n/4
s/\n(\S+)(.*\s)(\S+)\n/:\3\2\1:/
y/\n/:/
' file
Выделите пятое поле с помощью уникального маркера, который гарантированно не будет найден.
Затем в той части, которая забаррикадирована маркерами с обеих сторон, переверните первое и последнее слова.
В случае, если предыдущий шаг не был выполнен, скажите, что у него было только одно имя, как, например, у людей в Центральной Азии, а затем удалите эти маркеры.
sed по умолчанию печатает пространство шаблонов.
С GNU awk для gensub():
$ gawk 'BEGIN{FS=OFS=":"} {$5=gensub(/^(\S+)((\s+\S+)*\s+)(\S+)$/,"\\4\\2\\1",1,$5)} 1' file
rovshan:x:6532:113:Ahmadli Rovshan:/home/students/rovshan:/bin/bash
smith_63:x:6533:113:Pataraprasitpon Smith:/home/students/smith_63:/bin/bash
rashad:x:6534:113:Mahmudov Rashad:/home/students/rashad:/bin/bash
dilgamsh:x:6535:113:Sharifov Dilgam:/home/students/dilgamsh:/bin/bash
nlk_ns:x:6536:113:Zhangali Nurlan:/home/students/nlk_ns:/bin/bash
karpwiol:x:6537:113:WK:/home/students/karpwiol:/bin/bash
yigit123:x:6538:113:Ersoz Yigit Mustafa:/home/students/yigit123:/bin/bash
orxan123:x:6539:113:Abiyev Orkhan:/home/students/orxan123:/bin/bash
valiyev:x:6540:113:valiyev rufat:/home/students/valiyev:/bin/bash
muhaz:x:6541:113:Mulleria Mohammed Kunhi AhmmedMuhaz:/home/students/muhaz:/bin/bash
fatihebr:x:6542:113:Ocal Fatih:/home/students/fatihebr:/bin/bash
mrgo_g:x:6543:113:gagaeva margarita:/home/students/mrgo_g:/bin/bash
chrisd48:x:6544:113:Hibestu Christian:/home/students/chrisd48:/bin/bash
qwertinx:x:6545:113:Kaczmarczyk Jakub:/home/students/qwertinx:/bin/bash
grrronek:x:6546:113:Gro▒ska Katarzyna:/home/students/grrronek:/bin/bash
shahin:x:6547:113:Mehrabov Shahin:/home/students/shahin:/bin/bash
soufroud:x:6548:113:bouzroud sofiane:/home/students/soufroud:/bin/bash
jtrojak0:x:6549:113:Trojak Joanna:/home/students/jtrojak0:/bin/bash
jtrojak1:x:6550:113:Trojak Joanna:/home/students/jtrojak1:/bin/bash
markam:x:6551:113:Kami▒ski Marcel:/home/students/markam:/bin/bash
С sed, который принимает аргумент -E
для поддержки ERE (, например.GNU или OSX/BSD sed):
$ sed -E 's/(([^:]*:){4})([^[:space:]:]+)(([[:space:]]+[^[:space:]:]+)*[[:space:]]+)([^[:space:]:]+)/\1\6\4\3/' file
rovshan:x:6532:113:Ahmadli Rovshan:/home/students/rovshan:/bin/bash
smith_63:x:6533:113:Pataraprasitpon Smith:/home/students/smith_63:/bin/bash
rashad:x:6534:113:Mahmudov Rashad:/home/students/rashad:/bin/bash
dilgamsh:x:6535:113:Sharifov Dilgam:/home/students/dilgamsh:/bin/bash
nlk_ns:x:6536:113:Zhangali Nurlan:/home/students/nlk_ns:/bin/bash
karpwiol:x:6537:113:WK:/home/students/karpwiol:/bin/bash
yigit123:x:6538:113:Ersoz Yigit Mustafa:/home/students/yigit123:/bin/bash
orxan123:x:6539:113:Abiyev Orkhan:/home/students/orxan123:/bin/bash
valiyev:x:6540:113:valiyev rufat:/home/students/valiyev:/bin/bash
muhaz:x:6541:113:Mulleria Mohammed Kunhi AhmmedMuhaz:/home/students/muhaz:/bin/bash
fatihebr:x:6542:113:Ocal Fatih:/home/students/fatihebr:/bin/bash
mrgo_g:x:6543:113:gagaeva margarita:/home/students/mrgo_g:/bin/bash
chrisd48:x:6544:113:Hibestu Christian:/home/students/chrisd48:/bin/bash
qwertinx:x:6545:113:Kaczmarczyk Jakub:/home/students/qwertinx:/bin/bash
grrronek:x:6546:113:Gro▒ska Katarzyna:/home/students/grrronek:/bin/bash
shahin:x:6547:113:Mehrabov Shahin:/home/students/shahin:/bin/bash
soufroud:x:6548:113:bouzroud sofiane:/home/students/soufroud:/bin/bash
jtrojak0:x:6549:113:Trojak Joanna:/home/students/jtrojak0:/bin/bash
jtrojak1:x:6550:113:Trojak Joanna:/home/students/jtrojak1:/bin/bash
markam:x:6551:113:Kami▒ski Marcel:/home/students/markam:/bin/bash