Biz birini kullanabilir sed
veya awk
tamamen sorunu çözmek için.
İle sed
:
$ sed 's/^.\./0&/' file.txt
Tüm &
ikame komutu (yerine kısmında oluşur s
), bu komutun model kısmına denk giriş hattının bir kısmına genişletilecektir.
Normal ifade ^.\.
, " ( ^
) ile başlayan rastgele bir karakter ( .
) ve ardından değişmez nokta ( \.
) ile başlayan tüm satırları eşleştir " anlamına gelir .
Çizgi, 1.02.2017 23:40:00
desen eşleşir ve çizginin başlangıcında 1.
değiştirilir 01.
.
İle awk
:
Söz konusu kısmi awk
kod üzerine inşa ...
Bu, belirtildiği gibi, her girdi satırının ikinci karakterini yazdırır:
$ awk '{ print substr($0, 2, 1) }' file.txt
substr($0, 2, 1)
İkinci karakteri döndüren gerçeği kullanabilir ve bunu koşul olarak kullanabiliriz:
$ awk 'substr($0, 2, 1) == "." { ... }' file.txt
Ne gider { ... }
prepends o kodu $0
bir sıfır ile mevcut hattın içeriği ise, önceki koşul doğruysa:
$ awk 'substr($0, 2, 1) == "." { $0 = "0" $0 }' file.txt
O zaman sadece tüm çizgilerin yazdırıldığından emin olmalıyız:
$ awk 'substr($0, 2, 1) == "." { $0 = "0" $0 } { print }' file.txt
Koşul substr($0, 2, 1) == "."
elbette düzenli bir ifadeye de dönüştürülebilir ( sed
çözümde kullandığımız ifadenin aynısını kullanırız ):
$ awk '/^.\./ { $0 = "0" $0 } { print }' file.txt
"Her zaman daha kısa olanın daha iyi" olduğunu düşünen bazı insanlar bunu şöyle yazar:
$ awk '/^.\./ { $0 = "0" $0 } 1' file.txt
(ve muhtemelen aynı zamanda en boşlukları kaldırın: awk '/^.\./{$0="0"$0}1' file.txt
)