История BASH в Linux — возможности замены в последней команде

Встроенные в bash переменные

Иногда мы используем в Linux команды с кучей длинных аргументов, а так же используем их многократно друг за другом, но меняя лишь пару параметров.
Пример :

touch /home/user1/test/scenario.txt  /etc/my-server/users/user1.cnf /var/log/my-server/user1.log

Что делать если тоже самое надо выполнить для user2?

Для изменения всех вхождений в последней команде можно использовать вот такую конструкцию:

!:gs/old_occurrence/new_occurrence

! вызывает последнюю команду
gs выполняет глобальную замену
Для замены слова можете выполнить вот такую команду:

^old_word^new_word

Примеры:

[www.linux] root:~ # touch test1 scenario1 result1
[www.linux] root:~ # !:gs/1/2
touch test2 scenario2 result2
[www.linux] root:~ # ls -l test* scenario* result*
-rw-r--r-- 1 root root 0 Nov 20 16:45 result1
-rw-r--r-- 1 root root 0 Nov 20 16:45 result2
-rw-r--r-- 1 root root 0 Nov 20 16:45 scenario1
-rw-r--r-- 1 root root 0 Nov 20 16:45 scenario2
-rw-r--r-- 1 root root 0 Nov 20 16:45 test1
-rw-r--r-- 1 root root 0 Nov 20 16:45 test2
[www.linux] root:~ # mkdir -p tests/exp/scenario1/tools/
[www.linux] root:~ # ^exp^lab
mkdir -p tests/lab/scenario1/tools/
[www.linux] root:~ # tree tests
tests
├── exp
│   └── scenario1
│       └── tools
└── lab
    └── scenario1
        └── tools

6 directories, 0 files

Прим.: при использовании команды ^^ на множество вхождений, будет заменено только первое вхождение.
Пример:

[www.linux] root:~ # ls -l test1 scenario1 result1
-rw-r--r-- 1 root root 0 Nov 20 16:45 result1
-rw-r--r-- 1 root root 0 Nov 20 16:45 scenario1
-rw-r--r-- 1 root root 0 Nov 20 16:45 test1
[www.linux] root:~ # ^1^2
ls -l test2 scenario1 result1
-rw-r--r-- 1 root root 0 Nov 20 16:45 result1
-rw-r--r-- 1 root root 0 Nov 20 16:45 scenario1
-rw-r--r-- 1 root root 0 Nov 20 16:45 test2

Замена последнего слова в истории

Например мы запустили команду ls и хотим заменить её на cat для просмотра содержимого. Для этого мы можем использовать для этого быстрые замены bash :  !$ или $_

ls -l /etc/passwd

cat $_  
или 
cat !$

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Блог админа