2013-06-07 5 views
8

質問:テキストファイルの各行の最後にいくつかの単語を追加する必要があります。誰もこの仕事をすることができるLinuxのbashシェルスクリプトを知っていますか?ありがとう!シェルスクリプト各行に接尾辞を付け加える

例:各行の末尾に単語doneを追加します。

line1 abcdefg done 
line2 abcdefg done 
line3 abcdeft done 

答えて

22

使用のawk:

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

またはインラインフラグでsedを:

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

を:あなたのためのこの仕事をしましたか? – anubhava

+0

解決策の問題は、ファイルの最後に 'done'を追加した行を追加します。これは必要ありません。 –

+0

私の編集した答えを確認してください。 – anubhava

2

を私はを読みました? script.vim

内容:

set backup 
g/^/ normal A done 
normal ZZ 

実行して、それが好き:

vim -S script.vim infile 

それは~接尾辞を使用してバックアップを作成するインプレースファイルを変更します。

1

あなたが行うことができ、純粋なbashでこれを実行したい場合:

append.shのような呼び出すことができると呼ばれるならば、
#!/bin/bash 

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


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

mv $TMPFILE $INFILE; 

bash append.sh file.txt 

が1_CRのコメントどおりを編集しました。

+0

ループ内の '$ TMPFILE'への複数の追加は、ループの最後に単一の'> $ TMPFILE'で置き換えることができると考えていたでしょう – iruvar

+0

@ 1_CR確かにそれは良いでしょう、この。 – imp25

+0

あなたがそれをしている間、 'IFS'をヌル文字列に設定し、' IFS = read -rx;のような 'read'に' -r'を渡します。 /wiki.bash-hackers.org/commands/builtin/read)。 +1、BTW – iruvar

0

Perlの道... AWKの1つのライナーsedの

入力

line1 abcdefg 
line2 abcdefg 
line3 abcdeft 

コード

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

'$ F [0]、" "、$ F [1]'よりも良い "" @ F "'(二重引用符で囲んでください)。ラインが2つの単語より長い(または短い)場合に備えて。 – Birei

+0

はい同意.... ....! – Debaditya

1

は、タスクのこれらの種類のなかれ便利ですと同じ、

# 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 

または

あなたは、以下のスクリプトを使用することができます。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 
関連する問題