Как заменить все вхождения в файле уникальным значением для каждого вхождения

Как Ipor Sircer предлагает , если вы можете открыть другой терминал, вы можете запустить gnome-terminal оттуда.

Кроме того, вы можете сбросить вывод gnome-terminal в файл: если вы используете GNOME, нажмите Alt F2 и введите

sh -c "gnome-terminal > ~/gnome-terminal.log 2>&1"

Затем вы весь вывод я найду в ~ / gnome-terminal.log .

2
05.06.2017, 05:01
2 ответа

В Perl это можно сделать так:

perl -pe 'BEGIN { $v=shift; }
          s/(MyID=")[^"]*(")/$1.$v.++$t.$2/ge' 7777777878889888 foo.xml bar.xml
4
27.01.2020, 21:55

Это не совсем просто, но работает. Скрипт принимает два аргумента, Arg1 — это строка для сопоставления, Arg2 — это имя входного файла. Это решение использует awk вместо sed.

#!/bin/bash
# myscript.sh
# Usage myscript.sh <string to match> <filename>

MyID=$1

awk -v MyID=$MyID 'BEGIN{ mynum=1; } { if (match($0,MyID) ) { sub(MyID, sprintf("%s%d", MyID, mynum) ) mynum++; } print }' $2
1
27.01.2020, 21:55

Теги

Похожие вопросы