Чтобы было проще запустить новую оболочку (exit
, когда закончите )и установите ограничение на более низкое значение (100 кбайт):
$ bash
$ ulimit -s 100
В приведенном вами примере может возникнуть ошибка:
$ touch {1..100000}.jpg
bash: /usr/bin/touch: Argument list too long
Но лучше использовать что-то вроде echo
. Поймите, что встроенная функция может не вызвать ошибку, эта команда должна работать правильно:
$ echo {000001..100000}6789
Также обратите внимание, что количество байтов значительно превышает предел, установленный выше (1,1 Мбайт):
$ echo {000001..100000}6789 | wc -c
1100000
Но эта команда не работает:
$ /bin/echo {000001..100000}6789
bash: /bin/echo: Argument list too long
Ограничение задается размером списка аргументов в байтах, добавленным к размеру среды оболочки.
Использование стандартаsed
:
$ printf 'XXthisXXisXXjust\nXXa\nXXtest\n' | sed 's/XX/YY/g; s/\(.*\)YY/\1XX/'
YYthisYYisXXjust
XXa
XXtest
Код sed
с комментариями:
s/XX/YY/g; # change all XX to YY
s/\(.*\)YY/\1XX/; # replace last YY with XX
Эта вторая замена заменит последний YY
в модифицированной строке на XX
, поскольку .*
является жадным.
Если ваш XX
— это [1;34m
, а YY
— это [1;90m
, то
sed 's/\[1;34m/[1;90m/g; s/\(.*\)\[1;90m/\1[1;34m/'
Обратите внимание, что [
нужно экранировать как \[
, если вы хотите сопоставить его в регулярном выражении.
XX
и заменяю их на YY
. s/XX/YY/g
\nYY
на\nXX
s/\\nYY/\nXX/g
YY
наXX
s/YY/XX/3
[root@ServerA studyroom]# echo "XXthisXXisXXjust\nXXa\nXXtest" | sed 's/XX/YY/g;s/\\nYY/\nXX/g;s/YY/XX/3'
YYthisYYisXXjust
XXa
XXtest
Как сказал бы один из моих коллег, все дороги ведут в Рим, и некоторые быстрее, чем другие.
С GNU sed
иrev
:
$ echo "XXthisXXisXXjust\nXXa\nXXtest" | rev | sed 's/XX/YY/2g' | rev
YYthisYYisYYjust\nYYa\nXXtest
$ echo -e "XXthisXXisXXjust\nXXa\nXXtest" | rev | sed 's/XX/YY/2g' | rev
YYthisYYisXXjust
XXa
XXtest
Нет необходимости обращать поиск и замену строк, т.е. XX
и YY
в данном конкретном случае, поскольку они являются палиндромными.