Linux Shell скрипт Sed вставка - PullRequest
0 голосов
/ 05 апреля 2020

Мне нужно написать скрипт оболочки для вставки строки параметра после каждой большой буквы в файле.

$parameter="4"

Пример input.txt

AppLe
House

Пример output.txt

A4ppL4e
H4ouse

Я пытался использовать

sed '/[A-Z]/i\$1\'

Может кто-нибудь мне помочь? THX

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

С GNU / BSD / busybox sed, которые поддерживают опцию -i:

param=4
sed -i'' -e 's/\([[:upper:]]\)/\1'"$param"'/g' input.txt

Это заменяет каждую заглавную букву внутри захваченной группы \(...\) g лобально на первую захваченную группу \1 и значение переменной param на месте.


Для стандарта sed вам нужен временный файл или sponge из пакета moreutils:

param=4
sed 's/\([[:upper:]]\)/\1'"$param"'/g' input.txt > temp && mv temp input.txt

param=4
sed 's/\([[:upper:]]\)/\1'"$param"'/g' input.txt | sponge input.txt
0 голосов
/ 05 апреля 2020

Используйте редактор файлов, например ed, для редактирования файлов:

printf "%s\n" 'g/[[:upper:]]/s/\([[:upper:]]\)/\1'"$param"'/g' w | ed -s input.txt

или, если вам больше нравится heredocs

ed -s input.txt <<EOF
g/[[:upper:]]/s/\([[:upper:]]\)/\1${param}/g
w
EOF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...