2012-02-16 24 views
11

我搜索了半天如何做一个简单的字符串操作中UNIX变化串字符X

我有这个字符串:

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

,我需要改变第5字符到A,怎么做?

C#它做这样theStr[4] = 'A'; // Zero based index.

回答

27

您可以sed,流线编辑器实现这一点:

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

首先,你管$ theStr的输出sed的,这与替代A第五个字符

+0

+1。事实上,sed是正确的工具。在附注中,只有输入字符串由'。'组成时,此特定版本才会起作用。 – CodeExpress 2012-02-16 20:55:04

+2

不,实际上,'.'不代表字符“点”,但它与所有角色匹配。如果我想匹配这个点,它会写'\ .' – jurgemaister 2012-02-16 20:57:37

+0

呵呵,根本没有意识到当我写这个时。 这是完美的! – CodeExpress 2012-02-16 21:14:02

3

我不知道这是否是优雅的,或者你需要的bash的版本,但

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

第一部分返回前四个字符,则字符“A”,然后将所有开始与第6个一个

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

这里的字符是一个关于ST真的好tutorial环操纵。

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

上面的sed命令替换第8个字符不管它是什么,因此您不必指定什么ch字符将被替换。

在你上面的代码只是有字符位置来代替

  • 8你想
  • B带什么要替换的字符!

因此,对于你具体的例子就变成:

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

更何况,你可以用一个字符串替换一个通过提供的字符串,而不是B或只是其中B是不提供任何删除一个(\1\2