2012-02-16 19 views
11
ben bu dizesi vardır UNIX

değiştirme dizesi Char X

basit dize kullanımı nasıl uzun süre arandı ediyorum

:

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

Ve 5 kömürü değiştirmem gerekiyor A'ya nasıl yapılabilir?

sonra, ilk dört karakterini C# yılında o zarif olmadığını bilmiyorum bu theStr[4] = 'A'; // Zero based index.

cevap

27

Sen sed, akım çizgisi editörü ile bunu başarabilirsiniz:

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

Önce boru $ theStr çıkış sed, A. ile beşinci karakterini değiştirir

+0

+1. Gerçekten de doğru araç doğrudur. Bir yan not, bu özel sürüm sadece giriş dizesi '.' Oluşursa çalışacaktır. – CodeExpress

+2

Hayır, aslında, "." Karakteri "nokta" temsil etmiyor, ancak tüm karakterlerin bir eşleşmesi. Eğer noktayı eşleştirmek isteseydim, '\.' – jurgemaister

+0

hah yazardı, bunu yazdığımda hiç fark etmemiştim. Bu mükemmel! – CodeExpress

3

gibi bitti, veya ihtiyacınız Bash hangi sürümünü fakat

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

ilk bölümü döndürür karakter 'A' ve 6. birinin İşte

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

ile başlayan sonra tüm karakterler st üzerinde tutorial gerçekten iyi biridir halka manipülasyonu.

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

Yukarıdaki sed komutu, ne olursa olsun 8th karakter karakterinin yerini alır, dolayısıyla ne ch belirtmeniz gerekmez Arater değiştirilecek. Yukarıdaki kodda

sadece birlikte değiştirmek istediklerini karakteri ile

  • B istediğiniz karakter konumuyla

    • 8 değiştirmek zorunda!

    Yani belirli örneğin o olur:

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

    yerine B'nin dize sağlayarak bir dize ile bir yerini alabilir söz ya da sadece B olduğu bir şey sağlamıyor tarafından A silmek değil (\1\2)