İşte örnek dosya:
somestuff...
all: thing otherthing
some other stuff
Yapmak istediğim şey şu şekilde başlayan satıra eklemek all::
somestuff...
all: thing otherthing anotherthing
some other stuff
Yanıtlar:
Bu benim için çalışıyor
sed '/^all:/ s/$/ anotherthing/' file
İlk bölüm, bulmak için bir modeldir ve ikinci bölüm, $bir satırın sonu için kullanılan sıradan bir sed ikamesidir .
İşlem sırasında dosyayı değiştirmek isterseniz, -iseçeneği kullanın
sed -i '/^all:/ s/$/ anotherthing/' file
Veya başka bir dosyaya yönlendirebilirsiniz
sed '/^all:/ s/$/ anotherthing/' file > output
Metni $0, koşula uyuyorsa, awk olarak ekleyebilirsiniz :
awk '/^all:/ {$0=$0" anotherthing"} 1' file
/patt/ {...}çizgi, tarafından verilen desenle eşleşiyorsa, pattiçinde açıklanan işlemleri gerçekleştirin {}./^all:/ {$0=$0" anotherthing"}eğer satır ile başlıyorsa (ile temsil edilirse ^) all:, o zaman anotherthingsatıra ekleyin .1gerçek bir koşul olarak, şu varsayılan eylemi tetikler awk: geçerli satırı yazdır ( print $0). Bu her zaman olacak, dolayısıyla ya orijinal satırı ya da değiştirilmiş olanı yazdıracaktır.Verdiğiniz giriş için şu değeri döndürür:
somestuff...
all: thing otherthing anotherthing
some other stuff
Bir değişkene eklenecek metni de sağlayabileceğinizi unutmayın:
$ awk -v mytext=" EXTRA TEXT" '/^all:/ {$0=$0mytext} 1' file
somestuff...
all: thing otherthing EXTRA TEXT
some other stuff
awk: can't set $0
/usr/xpg4/bin/awkhangisinin "iyi" olduğunu kullanabilirsiniz awk.
Bash'de:
while read -r line ; do
[[ $line == all:* ]] && line+=" anotherthing"
echo "$line"
done < filename
İşte sed kullanarak başka bir basit çözüm.
$ sed -i 's/all.*/& anotherthing/g' filename.txt
Açıklama:
tümü. * tüm satırların "tümü" ile başladığı anlamına gelir.
& eşleşmeyi temsil eder (yani 'tümü' ile başlayan tam satır)
daha sonra sed eskisini daha sonra ile değiştirir ve 'başka bir şey' kelimesini ekler
Awk ile çözüm:
awk '{if ($1 ~ /^all/) print $0, "anotherthing"; else print $0}' file
Basitçe: Satır all, satır artı "başka bir şey" ile başlıyorsa , yalnızca satırı yazdırın.
awk '$1=="all:" {$(NF+1)="anotherthing"} 1'
condition {actions}çiftlerden oluşur . Eğer conditionatlanırsa, eylemler her kayıt için yapılmaktadır. Eğer {actions}ihmal ve koşul olarak değerlendirilirse olan gerçek (sayısı için durum olan 1) daha sonra varsayılan eylem geçerli kaydı yazdırmaktır.