Ответ 1
Это можно сделать с помощью sed
, редактора строки потока:
echo $theStr | sed s/./A/5
Сначала вы передаете вывод $theStr в sed, который заменяет пятый символ на A.
Я долго искал, как делать простые манипуляции с строками в UNIX
У меня есть эта строка:
theStr='...............'
И мне нужно изменить 5-й char на A, как это можно сделать?
В C#
это делается так: theStr[4] = 'A'; // Zero based index.
Это можно сделать с помощью sed
, редактора строки потока:
echo $theStr | sed s/./A/5
Сначала вы передаете вывод $theStr в sed, который заменяет пятый символ на A.
a="............"
b="${a:0:4}A${a:5}"
echo ${b}
Вот один действительно хороший учебник по обработке строк.
Я не знаю, элегантный ли он или какая версия bash вам нужна, но
theStr="${theStr:0:4}A${theStr:5}"
Первая часть возвращает первые четыре символа, затем символ "A", а затем все символы, начиная с шестого символа
[email protected]:~$ echo 'replace A please' | sed 's/^\(.\{8\}\).\(.*\)/\1B\2/'
replace B please
Команда sed выше заменяет символ 8th независимо от того, что это такое, поэтому вам не нужно указывать, какой символ следует заменить.
В приведенном выше коде вам просто нужно заменить
Итак, для вашего конкретного примера это будет:
[email protected]:~$ echo '...............' | sed 's/^\(.\{4\}\).\(.*\)/\1A\2/'
....A..........
Не говоря уже о том, что вы можете заменить A на строку, предоставив строку вместо B или просто удалить A, не предоставив ничего, где B (\1\2
)