Заменить k-ый на n-ый символы в 1-й строке и последней строке, используя bash? - PullRequest
0 голосов
/ 25 ноября 2018

Я хочу заменить некоторые символы в верхнем и нижнем колонтитуле файла.Если, скажем, я хочу заменить 5-9-й символ, как мне это сделать?Мне нужно использовать команду bash или shell.

Я хочу сделать что-то подобное

s="abcdabcd"
s=s=s[0]+"12"+s[4:]
>a12dabcd

У меня есть строка точной длины, которую я могу заменить, а также начало и конец замены.Я хочу поместить сгенерированную замену обратно в файл.

Пример:

У меня есть этот заголовок:

HEADER 22aabbccdd23aabbccdd

Я получаю эти начало иконечные индексы: 2,10

Я получаю эту строку: xyz56789

Я хочу это: HEADER 22xyz5678923aabbccdd

, чтобы заменить существующую 1-ую строку в файле.

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Просто с sed:

input.txt:

$ cat input.txt
22aabbccdd23aabbccdd
asasdfsdfd234234234234

$ sed -Ei '1 s/(..).{8}/\1xyz56789/' input.txt

Результат:

22xyz5678923aabbccdd
asasdfsdfd234234234234
0 голосов
/ 25 ноября 2018

Это можно сделать с помощью Perl:

perl -i -lpe 'if ($. == 1 || eof) { substr($_, 1, 2) = "12" }' input.txt
  • -i: изменить файл на месте
  • -l: автоматически убрать строки из ввода и добавить их обратноoutput
  • -p: перебрать строки входного файла и вывести их обратно
  • -e CODE: что делать для каждой строки

Сначала мыпроверьте, равен ли текущий номер строки ($.) 1 (т.е. мы обрабатываем первую строку файла) или мы достигли конца файла (то есть строка, обрабатываемая в данный момент, является последней строкой файла),Если условие истинно, мы берем подстроку текущей строки ($_), начиная со смещения 1 длины 2, и устанавливаем ее в "12".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...