Изменить строковый символ в индексе X - PullRequest
15 голосов
/ 16 февраля 2012

Я долго искал, как сделать простую манипуляцию со строкой в ​​UNIX

У меня есть эта строка:

theStr='...............'

И мне нужно изменить 5-й символ на А, как это можно сделать?

В C# это сделано так theStr[4] = 'A'; // Zero based index.

Ответы [ 4 ]

32 голосов
/ 17 февраля 2012

Этого можно добиться с помощью sed, редактора потоковой строки:

echo $theStr | sed s/./A/5

Сначала вы передаете вывод $ theStr в sed, который заменяет пятый символ на A.

12 голосов
/ 16 февраля 2012
a="............"
b="${a:0:4}A${a:5}"
echo ${b}

Вот один действительно хороший учебник по обработке строк.

3 голосов
/ 16 февраля 2012

Я не знаю, элегантно ли это или какая версия bash вам нужна, но

theStr="${theStr:0:4}A${theStr:5}"

Первая часть возвращает первые четыре символа, затем символ «А», а затем все символыначиная с 6-го

0 голосов
/ 17 февраля 2012
shivam@desktop:~$ echo 'replace A please' | sed 's/^\(.\{8\}\).\(.*\)/\1B\2/'
replace B please

Команда sed выше заменяет 8-й символ независимо от того, , что это такое, поэтому вам не нужно указывать, какой символ должен быть заменен.

В приведенном выше коде вы просто должны заменить

  • 8 с желаемой позицией персонажа
  • B с символом, которым хотите заменить!

Так что для вашего конкретного примера это становится:

shivam@desktop:~$ echo '...............' | sed 's/^\(.\{4\}\).\(.*\)/\1A\2/'
....A..........

Не говоря уже о том, что вы можете заменить A строкой, указав строку вместо B, или просто удалить A, не указав ничего, где B (\1\2)

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