2012-02-16 26 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