Bayangkan saya memiliki file input seperti ini:
INSERT INTO video_item_theme VALUES('9', '29');
INSERT INTO video_item_theme VALUES('19', '312');
INSERT INTO video_item_theme VALUES('414', '1');
Dan saya ingin menambahkan 10.000 hanya pada kisaran angka pertama, jadi saya berakhir dengan sesuatu seperti ini:
INSERT INTO video_item_theme VALUES('10009', '29');
INSERT INTO video_item_theme VALUES('10019', '312');
INSERT INTO video_item_theme VALUES('10414', '1');
Pendekatan saya adalah awalan "1000" ke satu angka digit, "100" Sesuatu seperti ...:
sed 's/[0-9]\{2\}/10&/g'
... tidak terlalu membantu, karena ini mengubah setiap kemunculan dua angka, tidak hanya pada kemunculan angka pertama:
INSERT INTO video_item_theme VALUES('9', '10029');
INSERT INTO video_item_theme VALUES('10019', '100312');
INSERT INTO video_item_theme VALUES('100414', '1');
OFS="'\''"
Saya tidak tahu apakah ada cara yang elegan untuk melakukannya dengan satu perintah (dan saya rasa tidak), tetapi Anda dapat dengan mudah melakukannya dengan satu perintah per panjang angka:
Trik untuk mengubah hanya angka yang Anda inginkan adalah dengan memasukkan beberapa konteks dalam pola, di sini tanda kutip tunggal dan koma, sehingga pola Anda unik di string Anda.
Hasil dari setiap perintah adalah sebagai berikut:
sumber
Solusi yang sama dengan Ansgar Wiechers , tetapi dalam
perl
:-a
pemisahan otomatis menjadi@F
pada'
.-n
loop di setiap baris.Lihat
perlrun(1)
.sumber