それで、ツイッターの誰かがこれについて言及しました。次のようなテキストファイルがあります。
watermelon
taco
bacon
cheese
「taco」の末尾にテキスト「kitten」を追加します。したがって、必要な出力は次のようになります。
watermelon
tacokitten
bacon
cheese
これをbashでどのように行うことができますか?
これについて bash 固有のものは何もありません。プログラムを使用するだけsed
です:
sed 's/^\(taco\)$/\1kitten/' inputfile
学術的に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
明示的に:
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