Я не уверен, что regexp может запомнить длину шаблона, поэтому для чистого (частичного) решения sed :
edit:
это было немного сложнее.
Я придумал sed-файл a.sed
p
s/[0-9]\.[0-9]/a.a/g
s/with/phase 1/
p
s/[0-9]a\.a/aa.a/g
s/a\.a[0-9]/a.aa/g
s/phase 1/phase 2/
p
s/[0-9]aa.a/aaa.a/g
s/a.aa[0-9]/a.aaa/g
s/phase 2/final/
это в основном делает то же самое, что и командная строка, но с отладочной строкой.
1.2
в a.a
(обратите внимание, что цифра в тексте, такая как 1.12%
будет превращена в a.a2%
)1.2
в a.a
(обратите внимание, что цифра в тексте, например, 1,12%
будет превращен в a.a2%
)p
и s/фаза x/.. /
когда OKuse
sed -f a.sed u
, где u
(да, это недопустимый IP-адрес, но это тоже не так)
*random text with different numbers* 255.43.23.8 *some more text* "SpecialWord" 32.123.21.44 *text again*
*random text with different 12* 255.4.2.8 *some more text* "SpecialWord" 32.12.21.44 *text again*
*random text with different 13* 255.453.263.788 *some more text* "SpecialWord" 2.123.21.454 *text again*
*random text with different 1.12%* 255.43.23.8 *some more text* "SpecialWord" 32.123.21.44 *text again*
*random text with different numbers* 5.43.23.8 *some more text* "SpecialWord" 32.3.1.44 *text again*
это приведет к
*random text final different numbers* aaa.aa.aa.a *some more text* "SpecialWord" aa.aaa.aa.aa *text again*
*random text final different 12* aaa.a.a.a *some more text* "SpecialWord" aa.aa.aa.aa *text again*
*random text final different 13* aaa.aaa.aaa.aaa *some more text* "SpecialWord" a.aaa.aa.aaa *text again*
*random text final different a.aa%* aaa.aa.aa.a *some more text* "SpecialWord" aa.aaa.aa.aa *text again*
*random text final different numbers* a.aa.aa.a *some more text* "SpecialWord" aa.a.a.aa *text again*
edit2 : если вы можете позволить себе временный файл
grep -Eo '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' u > v
получите список IP-адресов в v
sed s/[0-9]/a/g v > w
превратитесь в anonnymous IP в w
paste -d '/' v w | sed -e 's|^.*$|s/&/|'
сгенерируйте sed-файл, который превращает IP-адрес в анонимный IP...
paste -d '/' v w | sed -e 's|^.*$|s/&/|' | sed -f - u
... и применить к файлу.
результат такой же, как и выше, за исключением строки с 1.12%
*random text with different 1.12%* aaa.aa.aa.a *some more text* "SpecialWord" aa.aaa.aa.aa *text again*
это предполагает, что вы можете иметь временные файлы и любите использовать крылатую ракету, чтобы убить кролика.
Мне не хватало данных платформы для этого устройства.
Мне удалось заставить его работать, вставив данные платформы непосредственно в код для модуля драйвера:
static uint32_t tca8418_km_data[] = {
KEY(0, 0, KEY_F1),
KEY(0, 1, KEY_F2),
KEY(0, 2, KEY_F3),
...
};
static const struct matrix_keymap_data tca8418_mk_data = {
.keymap = tca8418_km_data,
.keymap_size = ARRAY_SIZE(tca8418_km_data),
};
static struct tca8418_keypad_platform_data my_tca8418_plat_data = {
.keymap_data = &tca8418_mk_data,
.rows = 6,
.cols = 8,
.rep = 1,
.irq_is_gpio = 1,
};
static struct i2c_board_info tca8418_board_info __initdata = {
I2C_BOARD_INFO("tca8418_keypad", 0x34),
.platform_data = &my_tca8418_plat_data,
.irq = 16, // GPIO pin 16
};
Затем добавив это в функцию __init:
static int __init tca8418_keypad_init(void)
{
struct i2c_adapter *i2c_adap;
i2c_adap = i2c_get_adapter(1);
i2c_new_device(i2c_adap, &tca8418_board_info);
...
}
Это не самое элегантное исправление, но оно сработало для меня. Я бы предпочел решение для пользовательского пространства, но мне не удалось его найти.