SED: Son satırdan sonra metin girilsin mi?


76

Komut bir dosyanın başlangıcına bir etiket ekler:

sed -i "1s/^/<?php /" file

SED ile her dosyanın sonuna bir şey nasıl ekleyebilirim?


3
{ cat file; echo 'END OF FILE'; } > newFile , bu sh sayesinde de çalışır *. (sed değil ama çalışır ve basit)

4
Basit bir echo "Cool Text" >> filede hile yapmak gerekir.
Danpe,

Yanıtlar:


93

sed -e "\$aTEXTTOEND" en basit yoldur.

Nasıl çalışır

$Son satırla eşleşir (normal bir sedadres; 4aTEXTTOENDdördüncü satırdan sonra aeklenir ), append komutudur ve TEXTTOENDne eklenir.


Makefile'da $$ $ 'a kaçın.
stevesliva

OS X için sed -e '$a\NEWLINE\\'. NEWLINE'ı gerçek bir yeni satırla değiştirin.
Jorge Bucaran

13
sed -i -e "\ $ aTEXTTOEND" <dosyaadı> tam komut olur.
Lasse Meyer,

2
macos üzerinde çalışmıyor. Jorge Bucaran bile yorum yapmadı: sed: 1: "$ a \ NEWLINE \\": komutun sonunda \ 'den sonra ilave karakterler
Emanuele Paolini

1
Debian 9'da son satırın sonuna eklemek yerine yeni bir satır ekler.
Luciano Andress Martini

31

sedBu durumda kullanmaya gerek yok . Peki ya

echo "<?php" >> file

2
Yeterince doğru, ancak OP'nin kullanım durumunun dosyayı " <php " ve " >" ile desteklediğini ve seçilen içerikleri tek seferde aktardığını tahmin edebilirsiniz , bu yüzden muhtemelen gerçekten bir sedparça istiyor .
dmckee

2
Ayrıca bunu yapacaksanız ve yeni bir satır istemiyorsanız, echo -n
Vinko Vrsalovic

2
Tahmin etmeyi sevmiyorum. Her denediğimde yanılıyorum.

4
Kabul edilen cevabın daha kullanışlı olmasının bir başka nedeni de, bunun önceden hazırlanması durumunda, sudobu değişikliğin başarısız olmasına neden olur çünkü bu echodurum,$PATH
Tony Cesaro,

@TonyCesaro: echoyerleşik bir yazılımdır , aynı zamanda içinde bulunan yürütülebilir bir dosyadır$PATH
Zan Lynx

24

Sona çıkan php etiketini dosyalara koymak istediğinizi varsayalım.

sed -i '$s/$/\n?>/' file

hile yapmalı


1
Bu, son girdi satırının keyfi manipülasyonunun istendiği durumlarda güzel çalışır. Teşekkürler!
Jay Taylor,

Komutun parçalanmış bir açıklaması çok takdir edilecektir
GGhe


3

Sed 'append (a)' komutunu kullanın. Örneğin, dosyanın sonuna iki satır eklemek için:

sed -i -e '$a\
foo1 bar1\
foo2 bar2' file

2

İçerikteki değişiklikleri bir dosyada belirli bir satırda yazmak ve yapmak basit bir şekilde. Belirli bir satır numarasına herhangi bir şey eklemek istiyorsanız, aşağıdaki komut kullanılabilir:

sed -i '2i i have started' sheikh.log

nerede 2i- 2 numaralı satır ve ben eklemek için duruyor. Son satıra eklemek zorundaysanız $, 2 yerine kullanın . Başladım - eklenecek metin ve sheikh.logdosya adı.

Aşağıdaki komutu kullanarak satırdaki değişiklikleri de yapabiliriz.

sed -i '2c we have started' sheikh.log

iolarak değiştirildi we.


-1

İlk ve son

Bir dosyanın başına / sonuna nasıl metin ekleyeceğinizi / ekleyeceğinizi araştıran birinin muhtemelen diğerinin de nasıl yapılacağını bilmesi gerektiğini varsayardım.

cal |                            \
  gsed -E                        \
       -e     '1i\{'             \
       -e     '1i\  "lines": ['  \
       -e 's/(.*)/    "\1",/'    \
       -e '$s/,$//'              \
       -e     '$a\  ]'           \
       -e     '$a\}'

açıklama

Bu calçıkış , genişletilmiş RegEx ( ) ve 6 "betik" uygulanmış ( ) ve guan- sed( brew.sh gsedaracılığıyla yüklenen macOS'ta ) ve okunabilirlik için kaçan satır sonları ile birlikte çıkış borularıdır . Script 1 ve 2 , "1. satırda, ekle" yi kullanır. Script 5 ve 6 , "<last> satırında, sonda" satırını kullanır . Kodun sonuçta beklenenleri temsil etmesi için metin çıktılarını dikey olarak hizaladım. Script 3 ve 4, ikame yapar (ikincisi sadece "<last>" satırı için geçerlidir). Sonuç, komut çıkışını geçerli JSON'a dönüştürmektir.-E-e\1i\$a\

çıktı

{
  "lines": [
    "    October 2019      ",
    "Su Mo Tu We Th Fr Sa  ",
    "       1  2  3  4  5  ",
    " 6  7  8  9 10 11 12  ",
    "13 14 15 16 17 18 19  ",
    "20 21 22 23 24 25 26  ",
    "27 28 29 30 31        ",
    "                      "
  ]
}

Sorunuza oy vermeme rağmen, istenen sonucu gösteren kabul edilen bir cevap da dahil olmak üzere çok sayıda cevabımız olduğuna dikkat edin.
Jeff Schaller

@JeffSchaller Stack Exchange topluluğu bir forum değil. Amacı OP'nin engellenmesine yardımcı olmanın ötesine geçiyor. Amaç, küresel bilgi tabanını, arayanların cevapları ararken karşılayabilecekleri birçok seçenekle donatmaktır. Cevabımı başlıklı yazmamın nedeni, kullanıcıların Google sonucunu tıklamadan önce bu cevabın faydasını tanımasına yardımcı olmaktır.
Bruno Bronosky
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.