Berikut adalah contoh file:
somestuff...
all: thing otherthing
some other stuff
Yang ingin saya lakukan adalah menambahkan baris yang dimulai dengan all:
seperti ini:
somestuff...
all: thing otherthing anotherthing
some other stuff
Ini berhasil untuk saya
sed '/^all:/ s/$/ anotherthing/' file
Bagian pertama adalah pola untuk dicari dan bagian kedua adalah substitusi sed biasa yang digunakan $
untuk akhir baris.
Jika Anda ingin mengubah file selama proses tersebut, gunakan -i
opsi
sed -i '/^all:/ s/$/ anotherthing/' file
Atau Anda dapat mengarahkannya ke file lain
sed '/^all:/ s/$/ anotherthing/' file > output
Ini seharusnya berhasil untuk Anda
sed -e 's_^all: .*_& anotherthing_'
Menggunakan perintah s (substitusi) Anda dapat mencari baris yang memenuhi ekspresi reguler. Pada perintah di atas,
&
singkatan dari string yang cocok.sumber
Anda dapat menambahkan teks ke
$0
dalam awk jika sesuai dengan kondisi:awk '/^all:/ {$0=$0" anotherthing"} 1' file
Penjelasan
/patt/ {...}
jika garis cocok dengan pola yang diberikan olehpatt
, maka lakukan tindakan yang dijelaskan di dalamnya{}
./^all:/ {$0=$0" anotherthing"}
jika garis dimulai (diwakili oleh^
) denganall:
, maka tambahkananotherthing
ke baris.1
sebagai kondisi sebenarnya, memicu tindakan defaultawk
: print the current line (print $0
). Ini akan selalu terjadi, jadi ini akan mencetak baris asli atau yang dimodifikasi.Uji
Untuk masukan yang Anda berikan, ia mengembalikan:
Perhatikan, Anda juga bisa memberikan teks untuk ditambahkan dalam variabel:
$ awk -v mytext=" EXTRA TEXT" '/^all:/ {$0=$0mytext} 1' file somestuff... all: thing otherthing EXTRA TEXT some other stuff
sumber
awk: can't set $0
/usr/xpg4/bin/awk
yang merupakan awk "baik".Dalam pesta:
while read -r line ; do [[ $line == all:* ]] && line+=" anotherthing" echo "$line" done < filename
sumber
Berikut adalah solusi sederhana lainnya menggunakan sed.
$ sed -i 's/all.*/& anotherthing/g' filename.txt
Penjelasan:
semua. * berarti semua baris dimulai dengan 'semua'.
& mewakili pertandingan (yaitu baris lengkap yang dimulai dengan 'semua')
lalu ganti yang pertama dengan yang terakhir dan tambahkan kata 'yang lain'
sumber
Solusi dengan awk:
awk '{if ($1 ~ /^all/) print $0, "anotherthing"; else print $0}' file
Sederhananya: jika baris dimulai dengan
all
mencetak baris plus "anotherthing", jika tidak, cetak baris saja.sumber
awk '$1=="all:" {$(NF+1)="anotherthing"} 1'
condition {actions}
pasangan. Jikacondition
dihilangkan, tindakan dilakukan untuk setiap record. Jika{actions}
dihilangkan, dan kondisi bernilai true (yang merupakan kasus untuk nomor1
) maka tindakan default adalah mencetak record saat ini.