2013-06-07 23 views

cevap

22

Kullanım awk: Her satırın sonunda kelime done eklemek

awk 'NF{print $0 " done"}' inFile 

VEYA satır içi bayrağıyla sed:

sed -i.bak '!/[^[:blank:]]/s/$/ done/' inFile 
+0

: sizin için bu işe yaradı mı? – anubhava

+0

Dosya sonunda "bitti" ile fazladan bir satır ekledikleri çözümlerle ilgili sorun - bu istenmiyor. –

+0

Düzenlenmiş cevabımı şimdi kontrol edin. – anubhava

2

Ben okudun ? script.vim ait

İçerik:

set backup 
g/^/ normal A done 
normal ZZ 

Run hoşuna:

vim -S script.vim infile 

O ~ sonek ile yedeğini oluşturma yerinde dosyasını değiştirir.

1

saf bash bunu yapmak isterseniz yapabilirsiniz:

bash append.sh file.txt 

1_CR yorumlarına göre Düzenlendi: denilen eğer append.sh gibi çağrılabilir

#!/bin/bash 

INFILE=$1 
TMPFILE=/tmp/$INFILE.$$ 


while IFS= read -r; do 
    echo "$REPLY done"; 
done <$INFILE >$TMPFILE ; 

mv $TMPFILE $INFILE; 

.

+0

biri, döngü içinde '$ TMPFILE' için birden fazla eklentinin tek bir '> $ TMPFILE 'ile değiştirilebileceğini düşünecektir. – iruvar

+0

@ 1_CR döngüsünün sonunda daha iyi olurdu, kodu yansıtacak şekilde değiştirdim bu. – imp25

+0

Sen buna rağmen, IFS'yi null dizgisine ayarla ve '-r 'yi' read '' a, IFS = read -rx;' .. gibi birşeyler oku. Bu konu hakkında her şeyi oku [burada] (http://wiki.bash-hackers.org/commands/builtin/read). +1, BTW – iruvar

0

Perl yolu ... awk bir liner o

Girdi

line1 abcdefg 
line2 abcdefg 
line3 abcdeft 

sed Kod

perl -lane 'print $F[0]," ",$F[1]," done"' Input 
+0

Daha iyi '" @F "' (çift tırnak işaretleri), $ F [0], "", $ F [1] '.Sadece hat iki kelimeden daha uzun (veya daha kısa) olması durumunda. – Birei

+0

Evet katılıyorum .... !! – Debaditya

1

görevlerin bu tür alway yararlı olduğu gibi aynı ,

# cat append.txt 
line1 abcdefg 
line2 abcdefg 
line3 abcdeft 

# sed -i 's/$/done/g' append.txt 

# cat append.txt 
line1 abcdefg done 
line2 abcdefg done 
line3 abcdeft done 

veya

aşağıdaki komut dosyasını kullanabilirsiniz

: Bing.Physics @

# cat sedcheck.sh 
#!/bin/bash 
if [ $# -eq 0 ] 
    then 
     echo "No input supplied" 
    else 
     sed -i 's/$/ '$1'/g' $2 
fi 


# cat append.txt 
line1 abcdefg donedin 
line2 abcdefg donedin 
line3 abcdeft donedin 

# ./sedcheck.sh testing append.txt 

# cat append.txt 
line1 abcdefg donedin testing 
line2 abcdefg donedin testing 
line3 abcdeft donedin testing 
İlgili konular