0

それで、ツイッターの誰かがこれについて言及しました。次のようなテキストファイルがあります。

watermelon
taco
bacon
cheese

「taco」の末尾にテキスト「kitten」を追加します。したがって、必要な出力は次のようになります。

watermelon
tacokitten
bacon
cheese

これをbashでどのように行うことができますか?

4

3 に答える 3

3

これについて bash 固有のものは何もありません。プログラムを使用するだけsedです:

sed 's/^\(taco\)$/\1kitten/' inputfile
于 2013-08-03T01:01:29.920 に答える
1

学術的にsedは明らかにより良い選択ですが、純粋なbash(またはzsh)でそれを行う方法は次のとおりです。

while read line; do
    if [ "$line" = "taco" ]; then 
        line=${line}kitten
    fi
    echo "$line"
done < test.in

またはもう少し慣用的に:

while read line; do
    [ "$line" = "taco" ] && line=${line}kitten 
    echo "$line" 
done < test.in

またはでawk

awk '/^taco$/{$0=$0"kitten"}1' test.in
于 2013-08-03T02:30:18.093 に答える
0

明示的に:

TARGET_FILE=/path/to/file.txt
LINENO=1 # line number counter
NEEDLE="taco"

for word in $(cat $TARGET_FILE)
do     
    if [ "$word" = $NEEDLE ]
    then
        #echo "Appending $word on line $LINENO..."
        sed -i "${LINENO}s/.*/${word}TEXTAPPENDED/" $TARGET_FILE
        break
    fi   
    LINENO=$(( LINENO +1 )) #increase line number by 1  
done
于 2013-08-03T02:51:11.610 に答える