İş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, -i
seç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, patt
iç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 anotherthing
satıra ekleyin .1
gerç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/awk
hangisinin "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 condition
atlanı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.