Измените строку char на индекс X

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

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

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

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

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

Ответ 1

Это можно сделать с помощью sed, редактора строки потока:

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

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

Ответ 2

a="............"
b="${a:0:4}A${a:5}"
echo ${b}

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

Ответ 3

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

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

Первая часть возвращает первые четыре символа, затем символ "A", а затем все символы, начиная с шестого символа

Ответ 4

[email protected]:~$ echo 'replace A please' | sed 's/^\(.\{8\}\).\(.*\)/\1B\2/'
replace B please

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

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

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

Итак, для вашего конкретного примера это будет:

[email protected]:~$ echo '...............' | sed 's/^\(.\{4\}\).\(.*\)/\1A\2/'
....A..........

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